﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SAP.Middleware.Connector;
using CM.DL.DALC.NC03;
using DECOR.BL.BE;
using System.Text.RegularExpressions;
using System.Globalization;

namespace DECOR.DL.DALC.NC03
{
    public class PedidoDALC : IPedidoDALC
    {
        private string _connId = string.Empty;

        public static PedidoDALC Instance(string pConnId)
        {
            if (_instance == null)
            {
                lock (typeof(PedidoDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new PedidoDALC(pConnId);
                    }
                }
            }
            return _instance;
        }

        private PedidoDALC(string pConnId) { this._connId = pConnId; }
        private PedidoDALC() { }
        private static volatile PedidoDALC _instance = null;

        #region IPedidoDALC Members

        public List<DECOR.BL.BE.InstalaBE> ListadoInstalacion(string pNumDoc)
        {
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            InstalaBE obj = null;
            List<InstalaBE> lstInstala = new List<InstalaBE>();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_REPORTE_INST");
                function.SetValue("P_VBELN", pNumDoc);
                function.Invoke(dest);

                IRfcTable INSTALACIONES = function.GetTable("T_INSTALACIONES");

                foreach (IRfcStructure item in INSTALACIONES)
                {
                    obj = new InstalaBE();

                    obj.ZcodServ = item["ZCODSERV"].GetString();
                    obj.Material = item["MAKTX"].GetString();
                    obj.Cantidad = Convert.ToDecimal(item["KWMENG"].GetString());
                    obj.Unidad = item["MEINS"].GetString();
                    obj.Zprecio = Convert.ToDecimal(item["ZPRECIO"].GetString());
                    obj.Total = Convert.ToDecimal(item["TOTAL"].GetString());
                    obj.Texto = item["TEXTO"].GetString();
                    lstInstala.Add(obj);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return lstInstala;
        }

        public string generarServicio(out string pNumPedido, List<string> pLstServ, List<string> pLstVisita)
        {
            //ZWEB_CREAR_INSTALACION
            string pRetVal = string.Empty;
            DestConfig dc = new DestConfig();
            IRfcFunction function = null;
            RfcDestination dest = null;
            try
            {
                dest = DALC.getDestination(out dc);
                RfcStructureMetadata sm = dest.Repository.GetStructureMetadata("VBAK");
                IRfcTable VBAKTable = sm.CreateTable();
                IRfcStructure vbak = sm.CreateStructure();

                foreach (string item in pLstServ)
                {
                    vbak = sm.CreateStructure();
                    vbak.SetValue("VBELN", item);
                    if (VBAKTable.Count == 0)
                    {
                        if (pLstVisita.Count >= 1)
                            vbak.SetValue("ZZBELN1", pLstVisita[0]);// vbak.Ernam = pLstVisita[0];
                        if (pLstVisita.Count >= 2)
                            vbak.SetValue("ZZBELN2", pLstVisita[1]);// vbak.Submi = pLstVisita[1];
                        if (pLstVisita.Count >= 3)
                            vbak.SetValue("ZZBELN3", pLstVisita[2]);
                        if (pLstVisita.Count >= 4)
                            vbak.SetValue("ZZBELN4", pLstVisita[3]);
                    }
                    VBAKTable.Append(vbak);
                }

                function = dest.Repository.CreateFunction("ZWEB_CREAR_INSTALACION");
                function.SetValue("T_PEDIDOS", VBAKTable);
                function.Invoke(dest);
                pNumPedido = function.GetString("P_VBELN");
                pRetVal = function.GetString("P_RETVAL");

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            pRetVal = pRetVal.Replace(",", "");
            return pRetVal;
        }

        public List<DECOR.BL.BE.PlanFactBE> getPlanFact(string pNumPedido, out List<DECOR.BL.BE.CatFactBE> pCatFact)
        {
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            PlanFactBE planFact = null;
            List<PlanFactBE> lst_PlanFact = new List<PlanFactBE>();
            List<CatFactBE> lst_CatFactBE = new List<CatFactBE>();
            bool pasa = true;

            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_VER_PLAN_FACT");
                function.SetValue("P_VBELN", pNumPedido.PadLeft(10, '0'));
                function.Invoke(dest);

                IRfcTable FPLT = function.GetTable("T_FPLT");
                IRfcTable TFPLU = function.GetTable("T_TFPLU");

                foreach (IRfcStructure item in FPLT)
                {
                    planFact = new PlanFactBE();

                    if (lst_PlanFact != null)
                    {
                        if (lst_PlanFact.Find(X => X.FPLTR.Equals(item["FPLTR"].GetString())) != null)
                        {
                            pasa = false;
                        }
                    }

                    if (pasa)
                    {
                        planFact.AFDAT = ParametroDALC.dateSapToNet(item["FKDAT"].GetString());
                        planFact.BONBA = Convert.ToDecimal(item["BONBA"].GetString());
                        planFact.CCACT = item["CCACT"].GetString();
                        planFact.CMPRE = Convert.ToDecimal(item["CMPRE"].GetString());
                        planFact.CMPRE_FLT = Convert.ToDouble(item["CMPRE_FLT"].GetString());
                        planFact.FAKCA = item["FAKCA"].GetString();
                        planFact.FAKSP = item["FAKSP"].GetString();
                        planFact.FAKWR = Convert.ToDecimal(item["FAKWR"].GetString());
                        planFact.FAREG = item["FAREG"].GetString();
                        planFact.FKARV = item["FKARV"].GetString();
                        planFact.FKDAT = Convert.ToDateTime(item["FKDAT"].GetString());
                        planFact.FKSAF = item["FKSAF"].GetString();
                        planFact.FPFIX = item["FPFIX"].GetString();
                        planFact.FPLAE = item["FPLAE"].GetString();
                        planFact.FPLNR = item["FPLNR"].GetString();
                        planFact.FPLTR = item["FPLTR"].GetString();
                        planFact.FPROZ = Convert.ToDecimal(item["FPROZ"].GetString());
                        planFact.FPTTP = item["FPTTP"].GetString();
                        planFact.KORTE = item["KORTE"].GetString();
                        planFact.KURFP = Convert.ToDecimal(item["KURFP"].GetString());
                        planFact.KURRF = Convert.ToDecimal(item["KURRF"].GetString());
                        planFact.KZWI1 = Convert.ToDecimal(item["KZWI1"].GetString());
                        planFact.KZWI2 = Convert.ToDecimal(item["KZWI2"].GetString());
                        planFact.KZWI3 = Convert.ToDecimal(item["KZWI3"].GetString());
                        planFact.KZWI4 = Convert.ToDecimal(item["KZWI4"].GetString());
                        planFact.KZWI5 = Convert.ToDecimal(item["KZWI5"].GetString());
                        planFact.KZWI6 = Convert.ToDecimal(item["KZWI6"].GetString());
                        planFact.MLBEZ = item["MLBEZ"].GetString();
                        planFact.MLSTN = item["MLSTN"].GetString();
                        planFact.NETPR = Convert.ToDecimal(item["NETPR"].GetString());
                        planFact.NETWR = Convert.ToDecimal(item["NETWR"].GetString());
                        planFact.NFDAT = Convert.ToDateTime(item["NFDAT"].GetString() != "0000-00-00" ? item["NFDAT"].GetString() : "01-01-1900");
                        planFact.OFKDAT = Convert.ToDateTime(item["OFKDAT"].GetString() != "0000-00-00" ? item["OFKDAT"].GetString() : "01-01-1900");
                        planFact.PERIO = item["PERIO"].GetString();
                        planFact.PRSOK = item["PRSOK"].GetString();
                        planFact.SKFBP = Convert.ToDecimal(item["SKFBP"].GetString());
                        planFact.TAXK1 = item["TAXK1"].GetString();
                        planFact.TAXK2 = item["TAXK2"].GetString();
                        planFact.TAXK3 = item["TAXK3"].GetString();
                        planFact.TAXK4 = item["TAXK4"].GetString();
                        planFact.TAXK5 = item["TAXK5"].GetString();
                        planFact.TAXK6 = item["TAXK6"].GetString();
                        planFact.TAXK7 = item["TAXK7"].GetString();
                        planFact.TAXK8 = item["TAXK8"].GetString();
                        planFact.TAXK9 = item["TAXK9"].GetString();
                        planFact.TEMAN = item["TEMAN"].GetString();
                        planFact.TETXT = item["TETXT"].GetString();
                        planFact.TYPZM = item["TYPZM"].GetString();
                        planFact.UELNR = item["UELNR"].GetString();
                        planFact.UELTR = item["UELTR"].GetString();
                        planFact.VALDT = Convert.ToDateTime(item["VALDT"].GetString() != "0000-00-00" ? item["VALDT"].GetString() : "01-01-1900");
                        planFact.VALTG = item["VALTG"].GetString();
                        planFact.WAERS = item["WAERS"].GetString();
                        planFact.WAVWR = Convert.ToDecimal(item["WAVWR"].GetString() != "0000-00-00" ? item["WAVWR"].GetString() : "01-01-1900");
                        planFact.ZTERM = item["ZTERM"].GetString();

                        foreach (IRfcStructure item2 in TFPLU)
                        {
                            if (item2["FPTTP"].GetString().Equals(item["FPTTP"].GetString()))
                            {
                                planFact.KUNRG = item2["TTBEZ"].GetString();
                                break;
                            }
                        }

                        lst_PlanFact.Add(planFact);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }

            pCatFact = lst_CatFactBE;
            return lst_PlanFact;
        }

        public string setPlanFact(string pNumPedido, List<DECOR.BL.BE.PlanFactBE> lst_PlanFactBE, bool esCreacion)
        {
            bool elimina = false; string retVal = "";
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                RfcStructureMetadata smLT = dest.Repository.GetStructureMetadata("FPLT");
                RfcStructureMetadata smLA = dest.Repository.GetStructureMetadata("FPLA");

                IRfcTable t_fplt = smLT.CreateTable();
                IRfcStructure planFact;
                IRfcStructure planFactSAP;

                IRfcTable t_fpla = smLA.CreateTable();

                foreach (PlanFactBE item in lst_PlanFactBE)
                {
                    planFact = smLT.CreateStructure();
                    planFactSAP = smLT.CreateStructure();

                    planFact.SetValue("AFDAT", ParametroDALC.dateNetToSap(item.FKDAT));
                    planFact.SetValue("BONBA", item.BONBA);
                    planFact.SetValue("CCACT", item.CCACT);
                    planFact.SetValue("CMPRE", item.CMPRE);
                    planFact.SetValue("CMPRE_FLT", item.CMPRE_FLT);
                    planFact.SetValue("FAKCA", item.FAKCA);
                    planFact.SetValue("FAKSP", item.FAKSP);
                    planFact.SetValue("FAKWR", item.FAKWR);
                    planFact.SetValue("FAREG", item.FAREG);
                    planFact.SetValue("FKARV", item.FKARV);
                    planFact.SetValue("FKDAT", ParametroDALC.dateNetToSap(item.FKDAT));
                    planFact.SetValue("FKSAF", item.FKSAF);
                    planFact.SetValue("FPFIX", item.FPFIX);
                    planFact.SetValue("FPLAE", item.FPLAE);
                    planFact.SetValue("FPLNR", item.FPLNR);
                    planFact.SetValue("FPLTR", item.FPLTR);
                    planFact.SetValue("FPROZ", item.FPROZ);
                    planFact.SetValue("FPTTP", item.FPTTP);
                    planFact.SetValue("KORTE", item.KORTE);
                    planFact.SetValue("KURFP", item.KURFP);
                    planFact.SetValue("KURRF", item.KURRF);
                    planFact.SetValue("KZWI1", item.KZWI1);
                    planFact.SetValue("KZWI2", item.KZWI2);
                    planFact.SetValue("KZWI3", item.KZWI3);
                    planFact.SetValue("KZWI4", item.KZWI4);
                    planFact.SetValue("KZWI5", item.KZWI5);
                    planFact.SetValue("KZWI6", item.KZWI6);
                    planFact.SetValue("MLBEZ", item.MLBEZ);
                    planFact.SetValue("MLSTN", item.MLSTN);
                    planFact.SetValue("NETPR", item.NETPR);
                    planFact.SetValue("NETWR", item.NETWR);
                    planFact.SetValue("NFDAT", ParametroDALC.dateNetToSap(item.NFDAT));
                    planFact.SetValue("OFKDAT", ParametroDALC.dateNetToSap(item.OFKDAT));
                    planFact.SetValue("PERIO", item.PERIO);
                    planFact.SetValue("PRSOK", item.PRSOK);
                    planFact.SetValue("SKFBP", item.SKFBP);
                    planFact.SetValue("TAXK1", item.TAXK1);
                    planFact.SetValue("TAXK2", item.TAXK2);
                    planFact.SetValue("TAXK3", item.TAXK3);
                    planFact.SetValue("TAXK4", item.TAXK4);
                    planFact.SetValue("TAXK5", item.TAXK5);
                    planFact.SetValue("TAXK6", item.TAXK6);
                    planFact.SetValue("TAXK7", item.TAXK7);
                    planFact.SetValue("TAXK8", item.TAXK8);
                    planFact.SetValue("TAXK9", item.TAXK9);
                    planFact.SetValue("TEMAN", item.TEMAN);
                    planFact.SetValue("TETXT", item.TETXT);
                    planFact.SetValue("TYPZM", item.TYPZM);
                    planFact.SetValue("UELNR", item.UELNR);
                    planFact.SetValue("UELTR", item.UELTR);
                    planFact.SetValue("VALDT", ParametroDALC.dateNetToSap(item.VALDT));
                    planFact.SetValue("VALTG", item.VALTG);
                    planFact.SetValue("WAERS", item.WAERS);
                    planFact.SetValue("WAVWR", item.WAVWR);
                    planFact.SetValue("ZTERM", item.ZTERM);

                    planFactSAP.SetValue("AFDAT", ParametroDALC.dateNetToSap(item.FKDAT));
                    planFactSAP.SetValue("BONBA", item.BONBA);
                    planFactSAP.SetValue("CCACT", item.CCACT);
                    planFactSAP.SetValue("CMPRE", item.CMPRE);
                    planFactSAP.SetValue("CMPRE_FLT", item.CMPRE_FLT);
                    planFactSAP.SetValue("FAKCA", item.FAKCA);
                    planFactSAP.SetValue("FAKSP", item.FAKSP);
                    planFactSAP.SetValue("FAKWR", item.FAKWR);
                    planFactSAP.SetValue("FAREG", item.FAREG);
                    planFactSAP.SetValue("FKARV", item.FKARV);
                    planFactSAP.SetValue("FKDAT", ParametroDALC.dateNetToSap(item.FKDAT));
                    planFactSAP.SetValue("FKSAF", "");
                    planFactSAP.SetValue("FPFIX", item.FPFIX);
                    planFactSAP.SetValue("FPLAE", item.FPLAE);
                    planFactSAP.SetValue("FPLNR", item.FPLNR);
                    planFactSAP.SetValue("FPLTR", item.FPLTR);
                    planFactSAP.SetValue("FPROZ", item.FPROZ);
                    planFactSAP.SetValue("FPTTP", item.FPTTP);
                    planFactSAP.SetValue("KORTE", item.KORTE);
                    planFactSAP.SetValue("KURFP", item.KURFP);
                    planFactSAP.SetValue("KURRF", item.KURRF);
                    planFactSAP.SetValue("KZWI1", item.KZWI1);
                    planFactSAP.SetValue("KZWI2", item.KZWI2);
                    planFactSAP.SetValue("KZWI3", item.KZWI3);
                    planFactSAP.SetValue("KZWI4", item.KZWI4);
                    planFactSAP.SetValue("KZWI5", item.KZWI5);
                    planFactSAP.SetValue("KZWI6", item.KZWI6);
                    planFactSAP.SetValue("MLBEZ", item.MLBEZ);
                    planFactSAP.SetValue("MLSTN", item.MLSTN);
                    planFactSAP.SetValue("NETPR", item.NETPR);
                    planFactSAP.SetValue("NETWR", item.NETWR);
                    planFactSAP.SetValue("NFDAT", ParametroDALC.dateNetToSap(item.NFDAT));
                    planFactSAP.SetValue("OFKDAT", ParametroDALC.dateNetToSap(item.OFKDAT));
                    planFactSAP.SetValue("PERIO", item.PERIO);
                    planFactSAP.SetValue("PRSOK", item.PRSOK);
                    planFactSAP.SetValue("SKFBP", item.SKFBP);
                    planFactSAP.SetValue("TAXK1", item.TAXK1);
                    planFactSAP.SetValue("TAXK2", item.TAXK2);
                    planFactSAP.SetValue("TAXK3", item.TAXK3);
                    planFactSAP.SetValue("TAXK4", item.TAXK4);
                    planFactSAP.SetValue("TAXK5", item.TAXK5);
                    planFactSAP.SetValue("TAXK6", item.TAXK6);
                    planFactSAP.SetValue("TAXK7", item.TAXK7);
                    planFactSAP.SetValue("TAXK8", item.TAXK8);
                    planFactSAP.SetValue("TAXK9", item.TAXK9);
                    planFactSAP.SetValue("TEMAN", item.TEMAN);
                    planFactSAP.SetValue("TETXT", item.TETXT);
                    planFactSAP.SetValue("TYPZM", item.TYPZM);
                    planFactSAP.SetValue("UELNR", item.UELNR);
                    planFactSAP.SetValue("UELTR", item.UELTR);
                    planFactSAP.SetValue("VALDT", ParametroDALC.dateNetToSap(item.VALDT));
                    planFactSAP.SetValue("VALTG", item.VALTG);
                    planFactSAP.SetValue("WAERS", item.WAERS);
                    planFactSAP.SetValue("WAVWR", item.WAVWR);
                    planFactSAP.SetValue("ZTERM", item.ZTERM);

                    t_fplt.Append(planFact);
                    t_fplt.Append(planFactSAP);

                    if (item.TAXK1.Equals("D") && !elimina) elimina = true;
                }

                function = dest.Repository.CreateFunction("ZWEB_GRABAR_PLAN_FACT");
                function.SetValue("T_FPLT", t_fplt);
                function.SetValue("T_FPLA", t_fpla);
                function.SetValue("P_VBELN", pNumPedido);
                function.Invoke(dest);
                if (!esCreacion && elimina)
                {
                    function = dest.Repository.CreateFunction("ZWEB_GRABAR_PLAN_FACT");
                    function.SetValue("T_FPLT", t_fplt);
                    function.SetValue("P_VBELN", pNumPedido);
                    function.Invoke(dest);
                }
            }
            catch (RfcCommunicationException ex)
            {
                retVal = "Confirme nuevamente la operación por favor.";
            }
            catch (Exception ex)
            {
                retVal = ex.Message;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return retVal;
        }

        public List<DECOR.BL.BE.GlosaBE> glosasCotizacion(string numPedido)
        {
            string glosas;
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            List<GlosaBE> l_glosas = new List<GlosaBE>();
            DestConfig dc = new DestConfig();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_LEER_GLOSACOTIZACION");
                function.SetValue("PI_VBELN", numPedido);
                function.Invoke(dest);

                glosas = function.GetString("PI_VBELN");

                foreach (string glosa in glosas.Split('|'))
                {
                    GlosaBE item = new GlosaBE();
                    item.glosa = glosa;
                    l_glosas.Add(item);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return l_glosas;
        }

        public List<DECOR.BL.BE.FleteBE> ListaFleteEstiba(string pTipoRep, string pAgrupacion, string pOficina, DateTime pFecIni, DateTime pFecFin)
        {
            List<FleteBE> lstFlete = new List<FleteBE>();
            FleteBE objFlete = null;
            DestConfig dc = new DestConfig();
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                RfcStructureMetadata sm = dest.Repository.GetStructureMetadata("ZWEB_FILTROS");
                IRfcTable t_filtros = sm.CreateTable();

                IRfcStructure itmFiltro = sm.CreateStructure();
                itmFiltro.SetValue("SIGN", "I");
                itmFiltro.SetValue("OPTION", "BT");
                itmFiltro.SetValue("LOW", ParametroDALC.dateNetToSap(pFecIni));
                itmFiltro.SetValue("HIGH", ParametroDALC.dateNetToSap(pFecFin));
                itmFiltro.SetValue("FIELD", "FECHA");
                t_filtros.Append(itmFiltro);

                if (pOficina != "")
                {
                    itmFiltro.SetValue("SIGN", "I");
                    itmFiltro.SetValue("OPTION", "EQ");
                    itmFiltro.SetValue("LOW", pOficina);
                    itmFiltro.SetValue("FIELD", "CENTR");
                    t_filtros.Append(itmFiltro);
                }

                function = dest.Repository.CreateFunction("ZWEB_REPORTE_FLETES");
                function.SetValue("PS_PARM", pAgrupacion);
                function.SetValue("P_KTGRM", pTipoRep);
                function.SetValue("T_FILTROS", t_filtros);
                function.Invoke(dest);

                IRfcTable T_FLETES = function.GetTable("T_FLETES");

                foreach (IRfcStructure item in T_FLETES)
                {
                    objFlete = new FleteBE();
                    objFlete.FacFlete = item["FFLET"].GetDecimal();
                    objFlete.FleCobr = item["FCOBR"].GetDecimal();
                    objFlete.FleReal = item["NETWR"].GetDecimal();
                    objFlete.FleTeorico = item["KBETR"].GetDecimal();
                    objFlete.NonVendedor = item["NVEND"].GetString();
                    objFlete.OfVentas = item["VKBUR"].GetString();
                    objFlete.ValVtas = item["KZWI3"].GetDecimal();
                    lstFlete.Add(objFlete);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return lstFlete;
        }

        /// <summary>
        /// Devuelve la lista de fletes/estibas por codigo postal para un rango de fechas 
        /// </summary>
        /// <param name="pTipoRep">Flete (06) ó Estiba (07)</param>
        /// <param name="pOficina">Oficina de ventas (si es vacío trae todas)</param>
        /// <param name="pFecIni">Fecha de inicio rango</param>
        /// <param name="pFecFin">Fecha de fin rango</param>
        /// <returns></returns>
        public List<DECOR.BL.BE.FleteBE> ListaOpFleteEstiba(string pTipoRep, string pOficina, DateTime pFecIni, DateTime pFecFin)
        {
            List<FleteBE> lstFlete = new List<FleteBE>();
            FleteBE objFlete = null;
            DestConfig dc = new DestConfig();
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                RfcStructureMetadata sm = dest.Repository.GetStructureMetadata("ZWEB_FILTROS");
                IRfcTable t_filtros = sm.CreateTable();

                IRfcStructure itmFiltro = sm.CreateStructure();
                itmFiltro.SetValue("SIGN", "I");
                itmFiltro.SetValue("OPTION", "BT");
                itmFiltro.SetValue("LOW", ParametroDALC.dateNetToSap(pFecIni));
                itmFiltro.SetValue("HIGH", ParametroDALC.dateNetToSap(pFecFin));
                itmFiltro.SetValue("FIELD", "FECHA");
                t_filtros.Append(itmFiltro);

                if (pOficina != "")
                {
                    itmFiltro.SetValue("SIGN", "I");
                    itmFiltro.SetValue("OPTION", "EQ");
                    itmFiltro.SetValue("LOW", pOficina);
                    itmFiltro.SetValue("FIELD", "CENTR");
                    t_filtros.Append(itmFiltro);
                }

                function = dest.Repository.CreateFunction("ZWEB_REPORTE_FLETES_CODPOS");
                function.SetValue("P_KTGRM", pTipoRep);
                function.SetValue("T_FILTROS", t_filtros);
                function.Invoke(dest);

                IRfcTable T_FLETES = function.GetTable("T_FLETES");

                foreach (IRfcStructure item in T_FLETES)
                {
                    objFlete = new FleteBE();
                    objFlete.OfVentas = item["POST_CODE1"].GetString();
                    objFlete.PesoBruto = item["BRGEW"].GetDecimal();
                    objFlete.FleTeorico = item["KBETR"].GetDecimal();
                    objFlete.FleReal = item["NETWR"].GetDecimal();
                    objFlete.FacFlete = item["FFLET"].GetDecimal();
                    objFlete.ValVtas = item["KZWI3"].GetDecimal();
                    objFlete.FleCobr = item["FCOBR"].GetDecimal();

                    lstFlete.Add(objFlete);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return lstFlete;
        }

        /// <summary>
        /// crea el doc. comercial especificado pedido / oferta / NC
        /// </summary>
        /// <param name="pNumPedido">Número de pedido creado</param>
        /// <param name="pObjPedido">Información para crear el pedido</param>
        /// <returns>mensaje de resultado</returns>
        public string procesarPedido(out string pNumPedido, DECOR.BL.BE.PedidoBE pObjPedido)
        {
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            string retVal = "", retMsg = "";
            //Número de pedido que se genera:
            string ex_Salesdocument = "";
            DestConfig dc = new DestConfig();
            string returnValue = "";
            string mail = "";
            int cont = 0; //rgutierrez 01.12.2011
            string linkAddress = ""; //rgutierrez 06.12.2011
            ClienteBE objClienteBE = null;
            IRfcTable t_RET2 = null;
            try
            {
                //-- corregir interlocutores para Cliente Eventual
                //ClienteDALC objClienteDALC = ClienteDALC.Instance(this._connId);
                //objClienteBE = objClienteDALC.leer(pObjPedido.CodCliente);

                //-----------------------------
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                RfcStructureMetadata sm = dest.Repository.GetStructureMetadata("BAPISDHD1");
                IRfcTable t_BAPI = sm.CreateTable();
                IRfcStructure itmBAPI = sm.CreateStructure();

                itmBAPI.SetValue("DOC_TYPE", pObjPedido.CodTipoDoc);
                itmBAPI.SetValue("PURCH_NO_C", pObjPedido.OrdenCompra);
                itmBAPI.SetValue("SALES_ORG", pObjPedido.OrgVentas);
                itmBAPI.SetValue("DISTR_CHAN", pObjPedido.CanalDist);
                itmBAPI.SetValue("DIVISION", pObjPedido.Sector);
                itmBAPI.SetValue("SALES_GRP", pObjPedido.CodGrupoVend);
                itmBAPI.SetValue("SALES_OFF", pObjPedido.CodOficina);
                itmBAPI.SetValue("REQ_DATE_H", ParametroDALC.dateNetToSap(DateTime.Today));
                itmBAPI.SetValue("DOC_DATE", ParametroDALC.dateNetToSap(DateTime.Today));
                itmBAPI.SetValue("SHIP_COND", pObjPedido.CondExp);
                itmBAPI.SetValue("DLV_BLOCK", pObjPedido.BloqueoEntrega);
                itmBAPI.SetValue("BILL_BLOCK", pObjPedido.BloqueoFactura);
                itmBAPI.SetValue("CSTCNDGRP1", pObjPedido.GrupoCond);
                itmBAPI.SetValue("ORD_REASON", pObjPedido.Motivo);
                itmBAPI.SetValue("PMNTTRMS", pObjPedido.CondPago);
                itmBAPI.SetValue("CURRENCY", pObjPedido.Moneda);
                itmBAPI.SetValue("PO_METHOD", pObjPedido.ClasePedidoCliente);
                itmBAPI.SetValue("H_CURR", pObjPedido.TipoVisita);

                //Proyecto y Cod de Version
                itmBAPI.SetValue("REC_POINT", pObjPedido.codProyecto);
                itmBAPI.SetValue("FKK_CONACCT", pObjPedido.codVersion);


                if (pObjPedido.Reenbolsable)
                {
                    itmBAPI.SetValue("CALC_MOTIVE", "X");
                }
                itmBAPI.SetValue("PURCH_NO_S", pObjPedido.nomProyecto);
                itmBAPI.SetValue("REF_1", pObjPedido.Referencia); //en la web se asigna el valor NumPedido

                //--- Campos Zs Servicios
                if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ"))
                {
                    itmBAPI.SetValue("ADD_VAL_DY", pObjPedido.Znpiso);

                    if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND")) //@@@@@ rhuapaya 16.08.2012
                    {
                        itmBAPI.SetValue("TAX_CLASS9", pObjPedido.Zasensor ? "X" : "");
                        itmBAPI.SetValue("TAX_CLASS8", pObjPedido.Ztransporte);
                    }
                }

                RfcStructureMetadata smTM = dest.Repository.GetStructureMetadata("BAPISDITM");
                RfcStructureMetadata smNR = dest.Repository.GetStructureMetadata("BAPIPARNR");
                RfcStructureMetadata smR1 = dest.Repository.GetStructureMetadata("BAPIADDR1");
                RfcStructureMetadata smND = dest.Repository.GetStructureMetadata("BAPICOND");
                RfcStructureMetadata smDL = dest.Repository.GetStructureMetadata("BAPISCHDL");
                RfcStructureMetadata smT2 = dest.Repository.GetStructureMetadata("BAPIRET2");
                RfcStructureMetadata smXT = dest.Repository.GetStructureMetadata("BAPISDTEXT");

                IRfcTable t_SDITM = smTM.CreateTable();
                IRfcStructure itmSDITM = smTM.CreateStructure();

                IRfcTable t_COND = smND.CreateTable();
                IRfcStructure itmCOND; //= smND.CreateStructure();

                IRfcTable t_SCHDL = smDL.CreateTable();
                IRfcStructure itmSCHDL = smDL.CreateStructure();

                decimal totaldesc = 0;
                foreach (DetalleBE itm in pObjPedido.Detalle)
                {
                    itmSDITM = smTM.CreateStructure();
                    string numVal = itm.Posicion;
                    itmSDITM.SetValue("ITM_NUMBER", numVal);
                    itmSDITM.SetValue("MATERIAL", itm.CodMaterial.PadLeft(18, '0'));
                    itmSDITM.SetValue("PLANT", itm.CodCentro);
                    if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc.Trim().ToUpper(), "PedSinAlm"))
                    {
                        itmSDITM.SetValue("STORE_LOC", itm.CodAlmacen);
                    }
                    else
                    {
                        itm.CodAlmacen = string.Empty;
                    }

                    if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc.Trim().ToUpper(), "CodSinLote"))
                    {
                        itmSDITM.SetValue("BATCH", itm.CodLote);
                    }
                    else
                    {
                        itm.CodLote = string.Empty;
                    }

                    itmSDITM.SetValue("DLV_PRIO", itm.PrioridadEntrega);
                    itmSDITM.SetValue("PRC_GROUP1", itm.CodGrupoMat);
                    itmSDITM.SetValue("REASON_REJ", itm.MotivoRechazo);
                    itmSDITM.SetValue("SHORT_TEXT", itm.DescMaterial);
                    //---
                    itmSDITM.SetValue("CURRENCY", pObjPedido.Moneda);
                    //--- campos Zs Servicios
                    itmSDITM.SetValue("TAX_CLASS9", itm.Zservicio ? "X" : "");
                    //    itmSDITM.SetValue("TAX_CLASS9", "X");

                    //si es tipopos cabecera Combo, busca los hijos para cambiar reparto, grp mat, 
                    if (ParametroDALC.esTipoCabComboStatic(itm.TipoPosicion))
                    {
                        List<DetalleBE> lstAux = pObjPedido.Detalle.FindAll(X => X.PosSup == itm.Posicion);
                        foreach (DetalleBE itmAux in lstAux)
                        {
                            itmAux.Cantidad = itmAux.CantComp * itm.Cantidad;
                            //si UM = UNidad => redondear al entero mayor
                            if (ParametroDALC.esTipoX(itmAux.CodUMedida, "UMUnidad"))
                            {
                                itmAux.Cantidad = (itmAux.Cantidad > decimal.Truncate(itmAux.Cantidad)) ? decimal.Truncate(itmAux.Cantidad) + 1 : itmAux.Cantidad;
                            }
                            itmAux.CodGrupoMat = itm.CodGrupoMat;
                            itmAux.PrioridadEntrega = itm.PrioridadEntrega;
                        }
                    }
                    //--- tipo de posición
                    if (ParametroDALC.esTipoCabComboStatic(itm.TipoPosicion) ||
                        ParametroDALC.esTipoCabKitStatic(itm.TipoPosicion) ||
                        ParametroDALC.esTipoPosComboStatic(itm.TipoPosicion) ||
                        itm.TipoPosicion == "ZE10" || (itm.Material.TipoMaterial.Equals("NA3")) ||
                        itm.TipoPosicion == "Z010") //-- Cambiar TipoPosición según tipo de material NA1, NA2, NA3 :: Requerimiento 06.04.2011
                    {
                        if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))//si no es NC ó ND
                        {
                            itmSDITM.SetValue("ITEM_CATEG", itm.TipoPosicion);
                        }
                    }
                    //rhuapaya 02052013 se comentó porque no registra los kits.
                    //itmSDITM.SetValue("HG_LV_ITEM", itm.PosSup);
                    itmSDITM.SetValue("HG_LV_ITEM", itm.PosSup);
                    itmSDITM.SetValue("COMP_QUANT", itm.CantComp);

                    //validación de documento de transporte:
                    if (pObjPedido.CodTipoDoc == ParametroDALC.getParamValueStatic("CodTransporte"))
                    {
                        itmSDITM.SetValue("TARGET_QTY", 1000m);
                        itmSDITM.SetValue("NET_WEIGHT", itm.Cantidad);
                        itmSDITM.SetValue("GROSS_WGHT", itm.Cantidad);
                        itmSDITM.SetValue("UNTOF_WGHT", "KG");
                    }
                    else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                    {
                        //itmSDITM.SetValue("TARGET_QTY", Convert.ToDecimal(itm.CantConfirmada));
                        itmSDITM.SetValue("TARGET_QTY", Convert.ToDecimal(itm.Cantidad));//sin 3 decimales cuando es NC/ND
                    }
                    else
                    {
                        itmSDITM.SetValue("TARGET_QTY", Convert.ToDecimal(itm.Cantidad) * 1000);//3 decimales SIN separador
                    }

                    foreach (RepartoBE itmRep in itm.Repartos)
                    {
                        if (itmRep.CantPed > 0m)
                        {
                            itmSCHDL = smDL.CreateStructure();
                            itmSCHDL.SetValue("ITM_NUMBER", numVal);
                            itmSCHDL.SetValue("SCHED_LINE", itmRep.Pos);
                            if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodReserva"))
                            {
                                itmRep.FechaEntrega = pObjPedido.Fecha.AddDays(Convert.ToDouble(ParametroDALC.getParamValueStatic("ValidezReserva")));
                            }
                            itmSCHDL.SetValue("REQ_DATE", ParametroDALC.dateNetToSap(itmRep.FechaEntrega));
                            //validación de documento de transporte:
                            if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodTransporte"))
                            {
                                itmSCHDL.SetValue("REQ_QTY", 1m);
                            }
                            else
                            {
                                if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND")) //cambio cantidades de reparto 17.05.2013
                                {
                                    if (itmRep.CantPed != itm.Cantidad)
                                    {

                                        itmSCHDL.SetValue("REQ_QTY", Convert.ToDecimal(itm.Cantidad));

                                    }
                                    else
                                    {

                                        itmSCHDL.SetValue("REQ_QTY", itmRep.CantPed);

                                    }

                                }
                                else
                                {
                                    itmSCHDL.SetValue("REQ_QTY", itmRep.CantPed);
                                } //cambio cantidades de reparto 17.05.2013

                                //if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                                //{
                                //  itmSCHDL.SetValue("REQ_QTY", itmRep.CantConf == 0 ? itmRep.CantPed : itmRep.CantConf);
                                //if (itmRep.CantConf != 0m)
                                //{
                                //   itmSCHDL.SetValue("REQ_QTY", itmRep.CantConf);
                                //}
                                //else
                                //{
                                //   itmSCHDL.SetValue("REQ_QTY", itmRep.CantPed);
                                //}

                                // }
                                //else
                                // {
                                //    itmSCHDL.SetValue("REQ_QTY", itmRep.CantPed == 0 ? itmRep.CantConf : itmRep.CantPed );
                                //if (itmRep.CantPed != 0m)
                                //{
                                //    itmSCHDL.SetValue("REQ_QTY", itmRep.CantPed);
                                //}
                                //else
                                //{
                                //    itmSCHDL.SetValue("REQ_QTY", itmRep.CantConf);
                                //}
                                //}
                            }

                            if (!ParametroDALC.esTipoX(itm.TipoPosicion, "TipoPosCombo"))
                            {
                                t_SCHDL.Append(itmSCHDL);
                            }
                        }
                    }
                    t_SDITM.Append(itmSDITM);

                    //Lista de Dctos:
                    #region Tabla de condiciones
                    totaldesc = 0;
                    if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCZP01"))
                    {
                        if (itm.Diferencia.Importe != 0m) //---- enviar la condición de Diferencia para NC x dif precio
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", itm.Diferencia.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.Diferencia.Importe * .1m);
                            //ref_Order_conditions_in.Add(icond);
                            t_COND.Append(itmCOND);
                        }
                        else
                        {
                            // Si no hay cond ZP01 ingresada, se toma el valor de la ZP00
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);

                            totaldesc = Math.Abs(itm.DctoAdicionalPorc.Valor) + Math.Abs(itm.DctoDecorMonto.Valor) + Math.Abs(itm.DctoDecorPorc.Valor) +
                                        Math.Abs(itm.DctoEstadisticoPorc.Valor) + Math.Abs(itm.DctoGenerico.Valor) + Math.Abs(itm.DctoGerenciaMonto.Valor) +
                                        Math.Abs(itm.DctoGerenciaPorc.Valor) + Math.Abs(itm.DctoZD06.Valor) + Math.Abs(itm.DctoZD07.Valor) +
                                        Math.Abs(itm.DctoZD11.Valor) + Math.Abs(itm.DctoGenericoZD08.Valor);
                            itmCOND.SetValue("COND_TYPE", itm.Diferencia.Condicion);

                            decimal convalue = itm.Precio.Valor - totaldesc;
                            itmCOND.SetValue("COND_VALUE", (convalue / 10));// es por la configuracion de ZP01(Importe/%)

                            //icond.Cond_Value = itm.Precio.Valor - totaldesc;
                            //icond.Cond_Value = icond.Cond_Value / 10; // es por la configuracion de ZP01(Importe/%)

                            if (itm.Material != null)
                            {
                                if (itm.Material.EspecialServ)
                                {
                                    itmCOND.SetValue("COND_VALUE", itm.PreZP08.Importe * .1m);
                                }
                            }
                            else if (itm.PreZP08 != null)
                            {
                                if (itm.PreZP08.Importe != 0m)
                                {
                                    itmCOND.SetValue("COND_VALUE", itm.PreZP08.Importe * .1m);
                                }
                            }
                            t_COND.Append(itmCOND);
                        }
                    }
                    else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ"))
                    {
                        if (itm.DctoZD06.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", itm.DctoZD06.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoZD06.Importe);
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DctoZD07.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", itm.DctoZD07.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoZD07.Importe);
                            t_COND.Append(itmCOND);
                        }
                        if (itm.PreZP08.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", itm.PreZP08.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.PreZP08.Importe * .1m);
                            t_COND.Append(itmCOND);
                        }
                    }
                    else
                    {
                        if (itm.DctoDecorPorc.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", itm.DctoDecorPorc.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoDecorPorc.Importe);
                            t_COND.Append(itmCOND);
                        }

                        if (itm.DctoAdicionalPorc.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", itm.DctoAdicionalPorc.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoAdicionalPorc.Importe);
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DctoEstadisticoPorc.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", itm.DctoEstadisticoPorc.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoEstadisticoPorc.Importe);
                            t_COND.Append(itmCOND);
                        }

                        if (itm.DctoGerenciaPorc.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", itm.DctoGerenciaPorc.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoGerenciaPorc.Importe);
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DctoGerenciaMonto.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", itm.DctoGerenciaMonto.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoGerenciaMonto.Importe * .1m);
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DctoGenerico.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", itm.DctoGenerico.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoGenerico.Importe);
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DctoZD11.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", ParametroDALC.getParamValueStatic("CondZD11"));
                            itmCOND.SetValue("COND_VALUE", itm.DctoZD11.Importe);
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DsctoAdicionalZD12.Importe != 0m) //rhuapaya 25.06.2012 @@@
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", numVal);
                            itmCOND.SetValue("COND_TYPE", ParametroDALC.getParamValueStatic("CondDctosAdicional"));
                            itmCOND.SetValue("COND_VALUE", itm.DsctoAdicionalZD12.Importe);
                            t_COND.Append(itmCOND);
                        }
                    }
                    #endregion
                }

                IRfcTable t_PARNR = smNR.CreateTable();
                IRfcStructure itmPARNR = smNR.CreateStructure();
                IRfcTable t_ADDR1 = smR1.CreateTable();
                IRfcStructure itmADDR1 = smR1.CreateStructure();
                if (objClienteBE != null && objClienteBE.Eventual)
                {
                    InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
                    //validando que el cliente eventual tenga un ruc @@@@ rhuapaya 30.07.2012
                    if (objSolicitante.Cliente.Ruc == null || objSolicitante.Cliente.Ruc.Trim() == "")
                    {
                        throw new Exception("El cliente necesita un número de RUC");
                    }
                }
                string pRefDocCat = string.Empty;
                //-- CREACIÓN CON REFERENCIA
                if (pObjPedido.NumPedido != "" && pObjPedido.NumPedido != "0000000000")
                {
                    //--- se asume q siempre trae kit/combo (para evitar el error de creación con items hijos)
                    pObjPedido.TieneKitCombo = true;
                    //--- factura
                    if (Convert.ToInt64(pObjPedido.NumPedido) >= 90000000)
                    {
                        //--- solo si se crea una NC/ND
                        if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                        {
                            //añadir referencia:
                            itmBAPI.SetValue("REF_DOC_L", pObjPedido.Referencia);
                            itmBAPI.SetValue("REFDOC_CAT", "M");
                        }
                        else
                        {
                            throw new Exception(ParametroDALC.getParamValueStatic("msgTDocRefInv"));
                        }
                    }
                    //--- oferta
                    else if (Convert.ToInt64(pObjPedido.NumPedido) >= 20000000)
                    {
                        //--- solo si no es NC/ND
                        if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                        {
                            itmBAPI.SetValue("REFDOC_CAT", "B");
                        }
                        else
                        {
                            throw new Exception(ParametroDALC.getParamValueStatic("msgTDocInvNCND"));
                        }
                    }
                    //--- pedido
                    else
                    {
                        //--- solo si no es NC/ND
                        if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                        {
                            itmBAPI.SetValue("REFDOC_CAT", "C");
                        }
                        else
                        {
                            throw new Exception(ParametroDALC.getParamValueStatic("msgTDocInvNCND"));
                        }
                    }
                    itmBAPI.SetValue("REF_DOC", pObjPedido.Referencia);//en la web se asigna el valor NumPedido
                    //--- @Fix creación con referencia por posición (para NC)
                    //if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodRefPos"))
                    if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodConRef"))
                    {
                        string itm_number = "";
                        //primero recuperamos el valor del campo itm_number
                        foreach (IRfcStructure item in t_SDITM)
                        {
                            foreach (IRfcField itm in item)
                            {
                                if (itm.Metadata.Name == "ITM_NUMBER")
                                {
                                    itm_number = itm.GetString();
                                    break;
                                }
                            }
                            foreach (IRfcField itm in item)
                            {
                                if (itm.Metadata.Name == "REF_DOC")
                                {
                                    itm.SetValue(pObjPedido.NumPedido);
                                }
                                if (itm.Metadata.Name == "REF_DOC_IT")
                                {
                                    itm.SetValue(itm_number.TrimStart('0'));
                                }
                                //itm.SetValue("REF_DOC", pObjPedido.NumPedido);
                                //itm.SetValue("REF_DOC_IT", itm.GetString("ITM_NUMBER"));
                            }
                        }

                        //foreach (IRfcField itm in itmSDITM)
                        //{
                        //    if (itm.Metadata.Name == "ITM_NUMBER")
                        //    {
                        //        itm_number = itm.GetString();
                        //    }
                        //}
                        //foreach (IRfcField itm in itmSDITM)
                        //{
                        //    if (itm.Metadata.Name == "REF_DOC")
                        //    {
                        //        itm.SetValue(pObjPedido.NumPedido);
                        //    }
                        //    if (itm.Metadata.Name == "REF_DOC_IT")
                        //    {
                        //        itm.SetValue(itm_number);
                        //    }
                        //    //itm.SetValue("REF_DOC", pObjPedido.NumPedido);
                        //    //itm.SetValue("REF_DOC_IT", itm.GetString("ITM_NUMBER"));
                        //}
                    }
                    //20110713 Inicio - WCA
                    if (objClienteBE != null && objClienteBE.Eventual)
                    {
                        InterlocutorBE objV1 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor1"); });
                        InterlocutorBE objV2 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor2"); });
                        InterlocutorBE objV3 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor3"); });
                        InterlocutorBE objV4 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor4"); });
                        bool res = false;
                        if (objV1 != null)
                        {
                            //rgutierrez 12.01.2012
                            res = pObjPedido.Interlocutores.Remove(objV1);
                            objV1.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor1");
                            pObjPedido.Interlocutores.Add(objV1);
                        }
                        if (objV2 != null)
                        {
                            //rgutierrez 12.01.2012
                            res = pObjPedido.Interlocutores.Remove(objV2);
                            objV2.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor2");
                            pObjPedido.Interlocutores.Add(objV2);
                        }
                        if (objV3 != null)
                        {
                            res = pObjPedido.Interlocutores.Remove(objV3);
                            objV3.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor3"); //rgutierrez 12.01.2012
                            pObjPedido.Interlocutores.Add(objV3);
                        }
                        if (objV4 != null)
                        {
                            res = pObjPedido.Interlocutores.Remove(objV4);
                            objV4.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor4"); //rgutierrez 12.01.2012
                            pObjPedido.Interlocutores.Add(objV4);
                        }
                    }
                }
                else
                {
                    //modificar los interlocutores de venta para los clientes eventuales
                    if (objClienteBE != null && objClienteBE.Eventual)
                    {
                        InterlocutorBE objV1 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor1"); });
                        InterlocutorBE objV2 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor2"); });
                        InterlocutorBE objV3 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor3"); });
                        InterlocutorBE objV4 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor4"); });
                        bool res = false;
                        if (objV1 != null)
                        {
                            res = pObjPedido.Interlocutores.Remove(objV1);
                            objV1.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor1");
                            pObjPedido.Interlocutores.Add(objV1);
                        }
                        if (objV2 != null)
                        {
                            res = pObjPedido.Interlocutores.Remove(objV2);
                            objV2.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor2"); //rgutierrez 12.01.2012
                            pObjPedido.Interlocutores.Add(objV2);
                        }
                        if (objV3 != null)
                        {
                            res = pObjPedido.Interlocutores.Remove(objV3);
                            objV3.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor3"); //rgutierrez 12.01.2012
                            pObjPedido.Interlocutores.Add(objV3);
                        }
                        if (objV4 != null)
                        {
                            res = pObjPedido.Interlocutores.Remove(objV4);
                            objV4.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor4"); //rgutierrez 12.01.2012
                            pObjPedido.Interlocutores.Add(objV4);
                        }
                    }
                }
                ////------------------------------------------------
                //recorremos ref_Order_items_in (cambio visto por Yanina Castro "ycastro")
                //rhuapaya 05.07.2012 @@@
                if (t_SDITM != null || t_SDITM.Count > 0)
                {
                    foreach (IRfcStructure item in t_SDITM)
                    {
                        if (itmBAPI["REFDOC_CAT"].GetString() != "")
                        {
                            item.SetValue("REF_DOC_CA", itmBAPI["REFDOC_CAT"].GetString());
                        }
                    }
                }
                ////------------------------------------------------
                foreach (InterlocutorBE objInter in pObjPedido.Interlocutores)
                {
                    //iop = null; paddr = null;
                    if (objInter.Cliente.Mail != null)
                        if (!objInter.Cliente.Mail.Equals(""))
                        {
                            mail = objInter.Cliente.Mail;
                            objInter.Cliente.Mail = string.Empty;
                        }
                    if (ParametroDALC.esTipoX(objInter.Funcion, "IlocEmpresa"))
                    {
                        if (!string.IsNullOrEmpty(objInter.Cliente.Codigo))
                        {
                            itmPARNR = smNR.CreateStructure();
                            itmPARNR.SetValue("PARTN_ROLE", objInter.Funcion);
                            itmPARNR.SetValue("PARTN_NUMB", objInter.Cliente.Codigo);
                            if (ParametroDALC.esTipoX(objInter.Funcion, "IlocCliente"))
                            {
                                InterlocutorBE objRestmp = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); });
                                //Po_Box_Lobby se usa para asignar un nif de solicitante y nif responsable pago
                                itmPARNR.SetValue("UNLOAD_PT", objInter.Cliente.Ruc.Trim() + "|" + objRestmp.Cliente.Ruc.Trim());
                            }
                            if (!objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocAgTrans")))
                            {
                                List<string> nombres = new List<string>(Regex.Split(objInter.Cliente.Descripcion, @"(?<=\G.{35})"));
                                itmPARNR.SetValue("NAME", nombres[0]);
                                itmPARNR.SetValue("NAME_2", nombres.Count > 1 ? nombres[1] : "");
                                itmPARNR.SetValue("NAME_3", nombres.Count > 2 ? nombres[2] : "");
                                itmPARNR.SetValue("NAME_4", nombres.Count > 3 ? nombres[3] : "");

                                itmPARNR.SetValue("STREET", objInter.Cliente.Direccion);
                                itmPARNR.SetValue("POSTL_CODE", objInter.Cliente.CodigoPostal);
                                itmPARNR.SetValue("TELEPHONE", objInter.Cliente.Telefono);
                                //--------------------------------
                                itmPARNR.SetValue("CITY", objInter.Cliente.Ciudad);
                                //--------------------------------
                                itmPARNR.SetValue("TITLE", ParametroDALC.getParamValueStatic("Tratamiento"));
                                itmPARNR.SetValue("LANGU", "S");
                            }
                            itmPARNR.SetValue("COUNTRY", objInter.Cliente.Pais);
                            if (ParametroDALC.esTipoX(objInter.Funcion, "IlocDestMerc"))
                            {
                                itmPARNR.SetValue("TRANSPZONE", objInter.Cliente.TranspZone);
                            }
                        }
                    }
                    else if (ParametroDALC.esTipoX(objInter.Funcion, "IlocPersona"))
                    {
                        if (!string.IsNullOrEmpty(objInter.Persona.CodPersona))
                        {
                            itmPARNR = smNR.CreateStructure();
                            itmPARNR.SetValue("PARTN_ROLE", objInter.Funcion);
                            itmPARNR.SetValue("PARTN_NUMB", objInter.Persona.CodPersona);
                        }
                    }
                    if (!string.IsNullOrEmpty(objInter.Cliente.Codigo) || !string.IsNullOrEmpty(objInter.Persona.CodPersona))
                    {
                        cont += 1;
                        linkAddress = "$000" + cont;
                        if (ParametroDALC.esTipoX(objInter.Funcion, "IlocStandard"))
                        {
                            itmPARNR.SetValue("ADDR_LINK", linkAddress);
                        }
                        t_PARNR.Append(itmPARNR);
                        //rgutierrez 01.12.2011
                        itmADDR1 = smR1.CreateStructure();
                        itmADDR1.SetValue("ADDR_NO", linkAddress);
                        itmADDR1.SetValue("NAME", itmPARNR.GetString("NAME"));
                        itmADDR1.SetValue("NAME_2", itmPARNR.GetString("NAME_2"));
                        itmADDR1.SetValue("NAME_3", itmPARNR.GetString("NAME_3"));
                        itmADDR1.SetValue("NAME_4", itmPARNR.GetString("NAME_4"));
                        itmADDR1.SetValue("CITY", itmPARNR.GetString("CITY"));
                        itmADDR1.SetValue("POSTL_COD1", itmPARNR.GetString("POSTL_CODE"));
                        itmADDR1.SetValue("STREET_LNG", itmPARNR.GetString("STREET"));
                        itmADDR1.SetValue("COUNTRY", itmPARNR.GetString("COUNTRY"));
                        itmADDR1.SetValue("LANGU", itmPARNR.GetString("LANGU"));
                        itmADDR1.SetValue("TEL1_NUMBR", itmPARNR.GetString("TELEPHONE"));
                        if (objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocCliente")))
                        {
                            itmADDR1.SetValue("E_MAIL", mail);
                        }
                        if (itmADDR1 != null)
                        {
                            t_ADDR1.Append(itmADDR1);
                        }
                    }
                }

                //tabla de textos
                IRfcTable t_SDTEXT = smXT.CreateTable();
                IRfcStructure itmSDTEXT = smXT.CreateStructure();
                int conta = 0;

                if (pObjPedido.Textos != null)
                {
                    foreach (TextoBE objTextoItm in pObjPedido.Textos)
                    {
                        conta = 0;
                        if (objTextoItm.Descripcion.Length > 132)
                        {
                            string texto = objTextoItm.Descripcion;
                            while (texto.Length > 132)
                            {
                                string linea = texto.Substring(0, 132);
                                texto = texto.Substring(132);
                                conta = conta + 1;
                                string valor_cont = "";
                                valor_cont = conta.ToString();
                                itmSDTEXT = smXT.CreateStructure();
                                itmSDTEXT.SetValue("TEXT_ID", objTextoItm.CodTexto);
                                itmSDTEXT.SetValue("TEXT_LINE", linea);
                                itmSDTEXT.SetValue("FORMAT_COL", valor_cont);
                                itmSDTEXT.SetValue("LANGU", objTextoItm.Langu);

                                t_SDTEXT.Append(itmSDTEXT);

                            }

                        }
                        else
                        {
                            itmSDTEXT = smXT.CreateStructure();
                            itmSDTEXT.SetValue("TEXT_ID", objTextoItm.CodTexto);
                            itmSDTEXT.SetValue("TEXT_LINE", objTextoItm.Descripcion);
                            itmSDTEXT.SetValue("LANGU", objTextoItm.Langu);

                            t_SDTEXT.Append(itmSDTEXT);
                        }
                    }
                }


                //IRfcTable t_RET2 = smT2.CreateTable();
                t_RET2 = smT2.CreateTable();
                IRfcStructure itmRET2 = smT2.CreateStructure();

                //-- verificar si se crea pedido/oferta/NC:
                if (ParametroDALC.esOferta(pObjPedido.CodTipoDoc) && !pObjPedido.CodTipoDoc.Equals("Z004"))
                {
                    itmBAPI.SetValue("QT_VALID_T", ParametroDALC.dateNetToSap(pObjPedido.FechaValidez));
                    //t_BAPI.Append(itmBAPI);

                    function = dest.Repository.CreateFunction("ZWEB_CREAR_OFERTA");
                    function.SetValue("T_HEADER", itmBAPI);
                    function.SetValue("T_ITEMS", t_SDITM);
                    function.SetValue("T_PARTNERS", t_PARNR);
                    function.SetValue("T_PARTNERADDRESSES", t_ADDR1);
                    function.SetValue("T_CONDITIONS", t_COND);
                    function.SetValue("T_SCHEDULES", t_SCHDL);
                    function.SetValue("T_RETURN", t_RET2);
                    function.SetValue("T_TEXT", t_SDTEXT);
                    function.Invoke(dest);
                    ex_Salesdocument = function.GetString("P_VBELN");
                    returnValue = function.GetString("P_OK");
                }
                else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND") && !pObjPedido.CodTipoDoc.Equals("Z004"))
                {
                    itmBAPI.SetValue("PRICE_DATE", pObjPedido.FechaFacturacion);
                    //t_BAPI.Append(itmBAPI);
                    function = dest.Repository.CreateFunction("ZWEB_CREAR_NCREDITO");
                    function.SetValue("T_HEADER", itmBAPI);
                    function.SetValue("T_ITEMS", t_SDITM);
                    function.SetValue("T_PARTNERS", t_PARNR);
                    function.SetValue("T_PARTNERADDRESSES", t_ADDR1);
                    function.SetValue("T_CONDITIONS", t_COND);
                    function.SetValue("T_SCHEDULES", t_SCHDL);
                    function.SetValue("T_RETURN", t_RET2);
                    function.SetValue("T_TEXT", t_SDTEXT);
                    function.Invoke(dest);
                    ex_Salesdocument = function.GetString("P_VBELN");
                    returnValue = function.GetString("P_OK");
                }
                else
                {
                    //t_BAPI.Append(itmBAPI);
                    function = dest.Repository.CreateFunction("ZWEB_CREAR_PEDIDO");
                    function.SetValue("T_HEADER", itmBAPI);
                    function.SetValue("T_ITEMS", t_SDITM);
                    function.SetValue("T_PARTNERS", t_PARNR);
                    function.SetValue("T_PARTNERADDRESSES", t_ADDR1);
                    function.SetValue("T_CONDITIONS", t_COND);
                    function.SetValue("T_SCHEDULES", t_SCHDL);
                    function.SetValue("T_RETURN", t_RET2);
                    function.SetValue("T_TEXT", t_SDTEXT);
                    function.Invoke(dest);
                    ex_Salesdocument = function.GetString("P_VBELN");
                    returnValue = function.GetString("P_OK");
                }

                ////-------------------
                pObjPedido.Mail = mail;

                foreach (IRfcStructure itemRet in t_RET2)
                {
                    if (ex_Salesdocument == "")
                    {
                        retVal += (itemRet.GetString("TYPE") == "E") ? itemRet.GetString("MESSAGE") + " " : ""; //"\r\n" : "";
                        retMsg += (itemRet.GetString("TYPE") != "S" && itemRet.GetString("TYPE") != "W") ? itemRet.GetString("MESSAGE") + " " : "";
                    }
                }
                pNumPedido = ex_Salesdocument;
                if (returnValue == "X")
                {
                    ////--- grabar nif
                    //pObjPedido.NumPedido = ex_Salesdocument;
                    //if (objClienteBE != null && objClienteBE.Eventual)
                    //{
                    //    //this.grabarNIF(pObjPedido);
                    //}

                    string auxMod = "";
                    bool pOkModif = true;
                    ////--- @Fix para precios en pedidos de servicio...
                    //InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
                    //InterlocutorBE objResPago = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); });
                    //pObjPedido = leer(pObjPedido.NumPedido, false);
                    //pObjPedido.Mail = mail;
                    //if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedModif")) //rgutierrez 01.12.2011 El correo ya se guarda en la creación
                    //{
                    //    pObjPedido.NumPedido = ex_Salesdocument;
                    //    string strRucAG = objSolicitante.Cliente.Ruc;
                    //    pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); }).Cliente.Ruc = strRucAG;
                    //    strRucAG = objResPago.Cliente.Ruc;
                    //    pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); }).Cliente.Ruc = strRucAG;

                    //    foreach (DetalleBE item in pObjPedido.Detalle)
                    //    {
                    //        item.Peso = item.Peso / item.Cantidad; // 23.08.2011 : se agregó para sacar la el peso unitario.
                    //        item.TipoPosicion = string.Empty;
                    //        if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodOferta"))
                    //            item.Repartos.Clear();
                    //    }

                    //    auxMod = this.modificar(out pOkModif, pObjPedido);
                    //}
                    //--- buscar mensaje de retorno:generarServicio
                    IRfcStructure irfS = t_RET2[t_RET2.Count - 1];
                    if (irfS.GetString("TYPE") == "S")
                    {
                        retVal += irfS.GetString("MESSAGE") + " ";
                    }
                    else
                    {
                        retVal += "Se creó el doc. de ventas con el número: " + ex_Salesdocument + " ";
                    }
                    //foreach (IRfcStructure item in t_RET2)
                    //{
                    //    if (item.GetString("TYPE") == "S")
                    //    {
                    //        //retVal += item.GetString("MESSAGE") + "\n";
                    //    }
                    //    else
                    //    {
                    //        //retVal += "Se creó el doc. de ventas con el número: " + ex_Salesdocument + "\n";
                    //    }
                    //}
                    //-- si la modificación de servicios no fue exitosa, mostrar mensaje de error
                    if (!pOkModif)
                    {
                        retVal += auxMod + " ";
                    }
                }
                else
                {
                    //--- si hubo error, muestra todo el mensaje de error.
                    retVal = retMsg;
                }
            }
            catch (RfcCommunicationException ex)
            {
                retVal = "Confirme nuevamente la operación por favor.";
            }
            catch (Exception ex)
            {
                //throw ex;
                retVal = ex.Message;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);

            }
            pNumPedido = ex_Salesdocument;
            return retVal;
        }

        /// <summary>
        /// retorna la información del documento de ventas
        /// </summary>
        /// <param name="pNumPedido">número de pedido/oferta</param>
        /// <returns>Objeto con la información del pedido/oferta</returns>
        public DECOR.BL.BE.PedidoBE leer(string pNumPedido, bool pLight)
        {
            PedidoBE retPedidoBE = new PedidoBE();
            List<InterlocutorBE> lstInterlocutores = new List<InterlocutorBE>();
            List<DetalleBE> lstDetalle = new List<DetalleBE>();
            DestConfig dc = new DestConfig();
            IRfcFunction function = null; RfcDestination dest = null;

            try
            {
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZCM_SD_004");
                function.SetValue("P_VBELN", pNumPedido);
                function.Invoke(dest);

                IRfcTable T_VBAK = function.GetTable("T_VBAK");
                IRfcTable T_VBAP = function.GetTable("T_VBAP");
                IRfcTable T_VBKD = function.GetTable("T_VBKD");
                IRfcTable T_VBPA = function.GetTable("T_VBPA");
                IRfcTable T_KONV = function.GetTable("T_KONV");
                IRfcTable T_VBEP = function.GetTable("T_VBEP");
                IRfcTable T_TEXT = function.GetTable("T_TEXT");
                IRfcTable t_t179t = function.GetTable("T_T179T");
                IRfcTable t_vbup = function.GetTable("T_VBUP");

                string reembolsable = string.Empty;
                CultureInfo provider = CultureInfo.InvariantCulture;
                foreach (IRfcStructure item in T_VBAK)
                {
                    retPedidoBE = new PedidoBE();

                    reembolsable = item["TAXK6"].GetString().Trim();
                    retPedidoBE.SubtotalImp = item["NETWR"].GetDecimal();
                    retPedidoBE.CodCliente = item["KUNNR"].GetString();
                    retPedidoBE.OrgVentas = item["VKORG"].GetString();
                    retPedidoBE.CanalDist = item["VTWEG"].GetString();
                    retPedidoBE.Sector = item["SPART"].GetString();
                    retPedidoBE.CodOficina = item["VKBUR"].GetString();
                    retPedidoBE.CodGrupoVend = item["VKGRP"].GetString();
                    retPedidoBE.CodTipoDoc = item["AUART"].GetString();
                    retPedidoBE.CondExp = item["VSBED"].GetString();
                    //---
                    retPedidoBE.Tratado = (item["VBTYP"].GetString().ToUpper() == "X" ? true : false);
                    retPedidoBE.TieneEntrega = (item["TAXK9"].GetString().ToUpper() == "X" ? true : false);
                    //---
                    retPedidoBE.Referencia = item["XBLNR"].GetString();
                    retPedidoBE.DocOriginal = item["VGBEL"].GetString();
                    retPedidoBE.OrdenCompra = item["BSTNK"].GetString();
                    retPedidoBE.BloqueoEntrega = item["LIFSK"].GetString();
                    retPedidoBE.BloqueoFactura = item["FAKSK"].GetString();
                    retPedidoBE.Motivo = item["AUGRU"].GetString();
                    retPedidoBE.Moneda = item["WAERK"].GetString();
                    retPedidoBE.Fecha = Convert.ToDateTime(item["AUDAT"].GetString());
                    //modificado 19.06.2012 se cambio de Audat a BSTDK rhuapaya @@@ 
                    IRfcStructure tmp = T_VBKD[0];

                    if (item["AUART"].GetString() == "ZO01" || item["AUART"].GetString() == "ZO02")
                    {
                        retPedidoBE.Fecha = DateTime.Parse(item["ERDAT"].GetString());
                    }
                    else
                    {
                        retPedidoBE.Fecha = tmp["BSTDK"].GetString() == "0000-00-00" ? DateTime.Parse(item["ERDAT"].GetString()) : DateTime.Parse(tmp["BSTDK"].GetString());
                    }
                    //se toma la fecha de precio
                    retPedidoBE.FechaPrecio = Convert.ToDateTime(tmp["PRSDT"].GetString());
                    retPedidoBE.Mail = item["CRM_GUID"].GetString().Trim();
                    //se adiciono el nombre de proyecto 20.06.2012 rhuapaya @@@
                    retPedidoBE.nomProyecto = item["ZZPROYECTO"].GetString();
                    //codigo de proyecto y codigo de version

                    retPedidoBE.codProyecto = item["ZZCODPROYECTO"].GetString();
                    retPedidoBE.codVersion = item["ZZVERSION"].GetString();

                    if (item["BNDDT"].GetString() != "0000-00-00")
                    {
                        retPedidoBE.FechaValidez = DateTime.Parse(item["BNDDT"].GetString(), provider, DateTimeStyles.None);
                    }
                    else
                    {
                        retPedidoBE.FechaValidez = Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy"));
                    }
                    if (item["VDATU"].GetString() != "0000-00-00")
                    {
                        retPedidoBE.FechaEntrega = DateTime.Parse(item["VDATU"].GetString(), provider, DateTimeStyles.None);
                    }
                    else
                    {
                        retPedidoBE.FechaEntrega = Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy"));
                    }
                    //--- Pedido de servicios
                    retPedidoBE.Ztransporte = item["ZTRANSPORTE"].GetString();
                    retPedidoBE.Znpiso = item["ZNPISO"].GetString();
                    retPedidoBE.Zncservicio = item["ZNCSERVICIO"].GetString() == "X" ? true : false;
                    retPedidoBE.Zasensor = item["ZASCENSOR"].GetString() == "X" ? true : false;

                    //fecha de facturación
                    //IRfcStructure tmp;
                    if (item["BSTDK"].GetString() != "00000000" || item["BSTDK"].GetString() != "")
                    {
                        tmp = T_VBKD[0];
                        //retPedidoBE.FechaFacturacion = DateTime.Parse(tmp["FKDAT"].GetString());
                        retPedidoBE.FechaFacturacion = DateTime.Parse(tmp["PRSDT"].GetString());
                    }
                    //else
                    //{
                    //    retPedidoBE.FechaFacturacion = Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy"));
                    //}
                    //INICIO VISITAS: mtejada 09.09.2011
                    retPedidoBE.TipoVisita = item["ZZTIPO_VISITA"].GetString();
                    if (item["ZZVISITA_REEM"].GetString().Equals("X"))
                    {
                        retPedidoBE.Reenbolsable = true;
                    }
                    //FIN VISITAS: mtejada 09.09.2011

                    //INICIO INSTALACIONES: mtejada 12.10.2011
                    retPedidoBE.PedidoVenta1 = item["ZVBELN1"].GetString();
                    retPedidoBE.PedidoVenta2 = item["ZVBELN2"].GetString();
                    retPedidoBE.PedidoVenta3 = item["ZVBELN3"].GetString();
                    retPedidoBE.PedidoVenta4 = item["ZVBELN4"].GetString();

                    retPedidoBE.PedidoVisita1 = item["ZZBELN1"].GetString();
                    retPedidoBE.PedidoVisita2 = item["ZZBELN2"].GetString();
                    retPedidoBE.PedidoVisita3 = item["ZZBELN3"].GetString();
                    retPedidoBE.PedidoVisita4 = item["ZZBELN4"].GetString();
                    //FIN INSTALACIONES: mtejada 12.10.2011
                    //rhuapaya 14.02.2012
                    retPedidoBE.nomProyecto = item["ZZPROYECTO"].GetString();
                    break;
                }

                foreach (IRfcStructure item in T_VBKD)
                {
                    retPedidoBE.GrupoCond = item["KDKG1"].GetString();
                    retPedidoBE.CondPago = item["ZTERM"].GetString();
                    break;
                }

                if (!pLight)
                {
                    //no se hace en esta parte del codigo, se obtiene despues de que se haya recuperado
                    //los datos de pedido y se carga los interlocutores en PedidoBC
                    //-- interlocutores:
                    //lstInterlocutores = this.listaInterlocutores(pNumPedido);
                    //retPedidoBE.Interlocutores = lstInterlocutores;
                }

                foreach (IRfcStructure item in T_VBAP)
                {
                    DetalleBE objDet = new DetalleBE();
                    objDet.Posicion = item["POSNR"].GetString();
                    objDet.CodMaterial = item["MATNR"].GetString();
                    objDet.CodUMedida = item["MEINS"].GetString();
                    objDet.CodCentro = item["WERKS"].GetString();
                    objDet.CodAlmacen = item["LGORT"].GetString();
                    objDet.CodLote = item["CHARG"].GetString();
                    objDet.DescMaterial = item["ARKTX"].GetString();

                    if (reembolsable != "")
                        objDet.Reembolsable = "(" + reembolsable + ")";

                    //-- tipo de posición
                    objDet.TipoPosicion = item["PSTYV"].GetString();
                    objDet.PosSup = item["UEPOS"].GetString();
                    objDet.CantComp = Convert.ToDecimal(item["KMPMG"].GetString());
                    objDet.TipoPosAnt = item["PSTYV"].GetString();
                    //codigo de agrupación
                    objDet.CodGrupoMat = item["MVGR1"].GetString();
                    objDet.MotivoRechazo = item["ABGRU"].GetString();
                    //-- material
                    objDet.Material.CodMaterial = item["MATNR"].GetString();
                    objDet.Material.CodUMedida = item["MEINS"].GetString();
                    //rhuapaya 18.06.2012 @@@ se agrego la jerarquia
                    objDet.Material.Jerarquia = item["PRODH"].GetString();
                    //validación de documento de transporte:
                    if (ParametroDALC.esTipoX(retPedidoBE.CodTipoDoc, "CodTransporte"))
                    {
                        objDet.Cantidad = Convert.ToDecimal(item["BRGEW"].GetString());
                        objDet.Peso = Convert.ToDecimal(item["KWMENG"].GetString());
                    }
                    else if (ParametroDALC.esTipoX(retPedidoBE.CodTipoDoc, "CodNCND"))
                    {
                        if (item["ZMENG"].GetDecimal() == 0)
                        {
                            objDet.Cantidad = Convert.ToDecimal(item["KWMENG"].GetString());
                        }
                        else
                        {
                            objDet.Cantidad = Convert.ToDecimal(item["ZMENG"].GetString());
                        }

                        objDet.Peso = Convert.ToDecimal(item["NTGEW"].GetString());
                    }
                    else
                    {
                        objDet.Cantidad = Convert.ToDecimal(item["KWMENG"].GetString());
                        objDet.Peso = Convert.ToDecimal(item["NTGEW"].GetString());
                    }

                    //mtejada: 01.04.2013 - Status 
                    foreach (IRfcStructure item2 in t_vbup)
                    {
                        if (item2["POSNR"].GetString() == item["POSNR"].GetString())
                        {
                            switch (item2["LFGSA"].GetString())
                            {
                                case "A":
                                    objDet.StatusDespacho = "No tratado";
                                    break;
                                case "B":
                                    objDet.StatusDespacho = "Tratado parcialmente";
                                    break;
                                case "C":
                                    objDet.StatusDespacho = "Tratado completamente";
                                    break;
                                default:
                                    objDet.StatusDespacho = "No relevante";
                                    break;
                            }
                        }
                    }
                    //repartos
                    objDet.Repartos.Clear();

                    foreach (IRfcStructure item2 in T_VBEP)
                    {
                        if (item2["POSNR"].GetString() == item["POSNR"].GetString())
                        {
                            RepartoBE itmRep = new RepartoBE();
                            itmRep.CantConf = Convert.ToDecimal(item2["BMENG"].GetString());
                            itmRep.CantPed = Convert.ToDecimal(item2["WMENG"].GetString());
                            itmRep.Pos = item2["ETENR"].GetString();
                            itmRep.FechaEntrega = Convert.ToDateTime(item2["EDATU"].GetString());
                            itmRep.TipoReparto = item2["ETTYP"].GetString().Trim();
                            objDet.Repartos.Add(itmRep);

                            if (item2["ETENR"].GetString() == "0001")
                            {

                            }
                            if (Convert.ToDecimal(item2["BMENG"].GetString()) > 0m)
                            {
                                objDet.CantConfirmada = Convert.ToDecimal(item2["BMENG"].GetString());
                                objDet.FechaCantConf = Convert.ToDateTime(item2["EDATU"].GetString());
                            }
                        }
                    }
                    objDet.PrioridadEntrega = item["LPRIO"].GetString();

                    //condiciones
                    objDet.PrecioSinIGV = Convert.ToDecimal(item["NETPR"].GetString());
                    objDet.TotalImpresion = Convert.ToDecimal(item["KZWI3"].GetString());
                    // descuentos

                    decimal dscM00 = 0m;
                    decimal dscM01 = 0m;
                    decimal dscM02 = 0m;
                    decimal dscM03 = 0m;
                    decimal dscM04 = 0m;
                    decimal dscM05 = 0m;
                    decimal dscM06 = 0m;
                    decimal dscM07 = 0m;
                    decimal dsGenerico = 0m;
                    decimal dscMT = 0m;

                    foreach (IRfcStructure item3 in T_KONV)
                    {
                        if (item3["KPOSN"].GetString() == item["POSNR"].GetString())
                        {
                            if (ParametroDALC.esTipoX(item3["KSCHL"].GetString(), "CondPrecios"))
                            {
                                objDet.Precio.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.Precio.Importe = Convert.ToDecimal(item3["KBETR"].GetString());
                            }
                            else if (item3["KSCHL"].GetString().Equals(ParametroDALC.getParamValueStatic("CondPrecio6")))
                            {
                                if (objDet.Precio.Importe != 0m)
                                {
                                    if (objDet.Precio.Importe < Convert.ToDecimal(item3["KBETR"].GetString()))
                                    {
                                        objDet.Precio.Importe = Convert.ToDecimal(item3["KBETR"].GetString());
                                        objDet.Precio.Valor += Convert.ToDecimal(item3["KWERT"].GetString());
                                    }
                                }
                                else
                                {
                                    objDet.Precio.Importe = Convert.ToDecimal(item3["KBETR"].GetString());
                                    objDet.Precio.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                }
                            }
                            else if (item3["KSCHL"].GetString().Equals(ParametroDALC.getParamValueStatic("CondPrecio1")))
                            {
                                objDet.Diferencia.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.Diferencia.Importe = Convert.ToDecimal(item3["KBETR"].GetString());
                            }
                            else if (item3["KSCHL"].GetString().Equals(ParametroDALC.getParamValueStatic("CondPrecio8")))
                            {
                                objDet.PreZP08.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.PreZP08.Importe = Convert.ToDecimal(item3["KBETR"].GetString());
                            }
                            else if (item3["KSCHL"].GetString().Equals(ParametroDALC.getParamValueStatic("CondIgv")))
                            {
                                objDet.Igv.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.Igv.Importe = Convert.ToDecimal(item3["KBETR"].GetString());
                            }
                            else if (item3["KSCHL"].GetString().Equals(ParametroDALC.getParamValueStatic("CondDctoDecorPorc")))
                            {
                                objDet.DctoDecorPorc.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.DctoDecorPorc.Importe = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;

                                dscM00 = Convert.ToDecimal(item3["KWERT"].GetString());
                            }
                            else if (item3["KSCHL"].GetString().Equals(ParametroDALC.getParamValueStatic("CondDctoAdicionalPorc")))
                            {
                                objDet.DctoAdicionalPorc.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.DctoAdicionalPorc.Importe = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;

                                dscM02 = Convert.ToDecimal(item3["KWERT"].GetString());
                            }
                            else if (item3["KSCHL"].GetString().Equals(ParametroDALC.getParamValueStatic("CondDctoEstadisticoPorc")))
                            {
                                objDet.DctoEstadisticoPorc.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.DctoEstadisticoPorc.Importe = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;

                                dscM03 = Convert.ToDecimal(item3["KWERT"].GetString());
                            }
                            else if (item3["KSCHL"].GetString().Equals(ParametroDALC.getParamValueStatic("CondDctoGerenciaPorc")))
                            {
                                objDet.DctoGerenciaPorc.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.DctoGerenciaPorc.Importe = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;

                                dscM04 = Convert.ToDecimal(item3["KWERT"].GetString());
                            }
                            else if (item3["KSCHL"].GetString().Equals(ParametroDALC.getParamValueStatic("CondDctoGerenciaMonto")))
                            {
                                objDet.DctoGerenciaMonto.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.DctoGerenciaMonto.Importe = Convert.ToDecimal(item3["KBETR"].GetString());

                                dscM05 = Convert.ToDecimal(item3["KWERT"].GetString());
                            }
                            else if (item3["KSCHL"].GetString().Equals(ParametroDALC.getParamValueStatic("CondZD06")))
                            {
                                objDet.DctoZD06.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.DctoZD06.Importe = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;

                                dscM06 = Convert.ToDecimal(item3["KWERT"].GetString());
                            }
                            else if (item3["KSCHL"].GetString().Equals(ParametroDALC.getParamValueStatic("CondZD07")))
                            {
                                objDet.DctoZD07.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.DctoZD07.Importe = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;

                                dscM07 = Convert.ToDecimal(item3["KWERT"].GetString());
                            }
                            else if (ParametroDALC.esTipoX(item3["KSCHL"].GetString(), "CondZD11"))
                            {
                                objDet.DctoZD11.Condicion = item3["KSCHL"].GetString(); //@mtejada 23.09.2011
                                objDet.DctoZD11.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.DctoZD11.Importe = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;
                            }
                            else if (ParametroDALC.esTipoX(item3["KSCHL"].GetString(), "CondDctos"))
                            {
                                objDet.DctoGenerico.Condicion = item3["KSCHL"].GetString(); //@mtejada 16.08.2011
                                objDet.DctoGenerico.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.DctoGenerico.Importe = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;
                            }
                            else if (ParametroDALC.esTipoX(item3["KSCHL"].GetString(), "CondDctosZD08"))
                            {
                                objDet.DctoGenericoZD08.Condicion = item3["KSCHL"].GetString(); //@mtejada 17.10.2011
                                objDet.DctoGenericoZD08.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.DctoGenericoZD08.Importe = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;
                            }
                            else if (ParametroDALC.esTipoX(item3["KSCHL"].GetString(), "CondDctosAdicional")) //rhuapaya 25.06.2012 @@@
                            {
                                objDet.DsctoAdicionalZD12.Condicion = item3["KSCHL"].GetString();
                                objDet.DsctoAdicionalZD12.Valor = Convert.ToDecimal(item3["KWERT"].GetString());
                                objDet.DsctoAdicionalZD12.Importe = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;
                                //le asignamos al pedido tambien
                                retPedidoBE.dsctoAdicionalZD12 = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;
                                retPedidoBE.dsctoAdicionalZD12tmp = Convert.ToDecimal(item3["KBETR"].GetString()) * .1m;
                            }
                            else if (item3["KSCHL"].GetString() == "ZPRC")//percepcion
                            {
                                objDet.TotPercep = Convert.ToDecimal(item3["KWERT"].GetString());
                            }
                        }
                    }
                    //--- Servicios
                    objDet.Zservicio = item["ZSERVICIO"].GetString() == "X" ? true : false;
                    if (dscM04 != 0)
                        dscMT = dscM04 + dscM07 + dscM06;
                    else
                        dscMT = dscM00 + dscM01 + dscM02 + dscM03 + dscM05 + dscM06 + dscM07;

                    objDet.DsctoMontTotal = dscMT;

                    lstDetalle.Add(objDet);
                }

                //para el agrupamiento de produtos por jerarquia @@@
                foreach (DetalleBE item in lstDetalle)
                {
                    if (item.Material.Jerarquia != null && item.Material.Jerarquia != "")
                    {
                        foreach (IRfcStructure _item in t_t179t)
                        {
                            if (_item["PRODH"].GetString() == item.Material.Jerarquia.Substring(0, 2))
                            {
                                item.JerarquiaPrincipalDesc = _item["VTEXT"].GetString();
                                break;
                            }
                        }
                    }
                }

                if (!pLight)
                {
                    //no se hace en esta parte del codigo, se obtiene despues de que se haya recuperado
                    //los datos de pedido y se carga los interlocutores en PedidoBC
                    //--- cargar cantidades de componente:
                    //string tpos = "";
                    //foreach (DetalleBE objTmpDet in lstDetalle)
                    //{
                    //    if (objTmpDet.PosSupCorto == "0" || objTmpDet.PosSupCorto == "")
                    //    {
                    //        List<DetalleBE> lstHijos = this.buscaTipoPosicion(retPedidoBE.CodTipoDoc, objTmpDet.CodMaterial, retPedidoBE.OrgVentas, retPedidoBE.CanalDist, objTmpDet.CodCentro, out tpos);
                    //        foreach (DetalleBE itmHijo in lstHijos)
                    //        {
                    //            List<DetalleBE> lstAux = lstDetalle.FindAll(X => X.CodMaterial == itmHijo.CodMaterial);
                    //            foreach (DetalleBE itmAux in lstAux)
                    //            {
                    //                itmAux.CantComp = itmHijo.CantComp;
                    //            }
                    //        }
                    //    }
                    //}
                }
                List<TextoBE> lstTextos = new List<TextoBE>();
                List<GlosaBE> lstBono = new List<GlosaBE>();
                List<GlosaBE> lstRegalo = new List<GlosaBE>();//RGF 20111028
                bool tienebonotitulo = false;
                bool tieneregalotitulo = false;//RGF 20111028
                char[] delimitador = { '-' };
                string[] linea;
                foreach (IRfcStructure item in T_TEXT)
                {
                    if (item["TEXT_ID"].GetString().Equals("BONO"))
                    {
                        if (!tienebonotitulo)
                        {
                            GlosaBE Gt = new GlosaBE();
                            Gt.codMaterial = "Resumen de Ventas para Marca";
                            lstBono.Add(Gt);
                            tienebonotitulo = true;

                        }
                        GlosaBE G = new GlosaBE();
                        linea = item["TEXT_LINE"].GetString().Split(delimitador);
                        G.codMaterial = linea[0].ToString();
                        if (G.codMaterial.Equals("Total de Bonos"))
                        {
                            G.glosa = linea[1].ToString() + linea[2].ToString();
                        }
                        else
                        {
                            G.codJerarquia = linea[1].ToString() + linea[2].ToString();
                            G.glosa = linea[3].ToString() + linea[4].ToString();
                        }
                        lstBono.Add(G);
                    }
                    else if (item["TEXT_ID"].GetString().Equals("REGA"))//RGF 20111028
                    {
                        if (!tieneregalotitulo)
                        {
                            GlosaBE Gt = new GlosaBE();
                            Gt.codMaterial = "Resumen de Regalos para Marca";
                            lstRegalo.Add(Gt);

                            Gt = new GlosaBE();
                            Gt.codMaterial = "Marca";
                            Gt.codJerarquia = "Importe";
                            lstRegalo.Add(Gt);
                            tieneregalotitulo = true;
                        }
                        GlosaBE G = new GlosaBE();
                        linea = item["TEXT_LINE"].GetString().Split(delimitador);
                        G.codMaterial = linea[0].ToString();
                        G.codJerarquia = linea[1].ToString() + linea[2].ToString();
                        lstRegalo.Add(G);
                    }
                    else
                    {
                        TextoBE objTxt = new TextoBE();
                        objTxt.CodTexto = item["TEXT_ID"].GetString();
                        objTxt.Descripcion = item["TEXT_LINE"].GetString();

                        lstTextos.Add(objTxt);
                    }
                }

                List<TextoBE> lstTmp = new List<TextoBE>();
                List<TextoBE> lstTmp2 = new List<TextoBE>();
                string codtext = "", destext = "";
                foreach (TextoBE item in lstTextos)
                {
                    destext = "";
                    if (item.CodTexto == codtext)
                    {
                        destext = item.Descripcion;
                    }
                    else
                    {
                        TextoBE objT = new TextoBE();
                        objT.CodTexto = item.CodTexto;
                        objT.Descripcion = destext;
                        lstTmp.Add(objT);
                    }
                    codtext = item.CodTexto;
                }

                foreach (TextoBE item in lstTmp)
                {
                    foreach (TextoBE itemT in lstTextos)
                    {
                        if (item.CodTexto == itemT.CodTexto)
                        {
                            item.Descripcion += itemT.Descripcion + " ";
                        }
                    }
                }

                retPedidoBE.Detalle = lstDetalle;
                retPedidoBE.NumPedido = pNumPedido;
                retPedidoBE.Textos = lstTmp;
                retPedidoBE.BonoCampania = lstBono;
                retPedidoBE.RegaloCampania = lstRegalo;//RGF 20111028

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }

            return retPedidoBE;
        }

        public string modificar(out bool pOk, DECOR.BL.BE.PedidoBE pObjPedido)
        {
            InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
            InterlocutorBE objRestmp = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); });
            //validando que el cliente eventual tenga un ruc @@@@ rhuapaya 30.07.2012
            if (objSolicitante.Cliente.Ruc == null || objSolicitante.Cliente.Ruc.Trim() == "")
            {
                throw new Exception("El cliente necesita un número de RUC");
            }

            PedidoBE retObj = new PedidoBE(); List<DetalleBE> lstDetalle = new List<DetalleBE>();
            //-------------------
            string p_Ok = "";

            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            string retVal = "", retMsg = "";
            //Número de pedido que se genera:
            string ex_Salesdocument = "";

            string returnValue = "";
            string mail = "";
            int cont = 0; //rgutierrez 01.12.2011
            string linkAddress = ""; //rgutierrez 06.12.2011
            ClienteBE objClienteBE = null;
            IRfcTable t_RET2 = null;
            DestConfig dc = new DestConfig();
            try
            {
                //-- corregir interlocutores para Cliente Eventual
                //ClienteDALC objClienteDALC = ClienteDALC.Instance(this._connId);
                //objClienteBE = objClienteDALC.leer(pObjPedido.CodCliente);
                //-----------------------------
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                RfcStructureMetadata sm = dest.Repository.GetStructureMetadata("BAPISDH1");
                IRfcTable t_BAPI = sm.CreateTable();
                IRfcStructure itmBAPI = sm.CreateStructure();

                itmBAPI.SetValue("SALES_GRP", pObjPedido.CodGrupoVend);
                itmBAPI.SetValue("SALES_OFF", pObjPedido.CodOficina);
                itmBAPI.SetValue("DISTR_CHAN", pObjPedido.CanalDist);
                itmBAPI.SetValue("SALES_ORG", pObjPedido.OrgVentas);
                itmBAPI.SetValue("REQ_DATE_H", ParametroDALC.dateNetToSap(DateTime.Today));
                itmBAPI.SetValue("DOC_DATE", ParametroDALC.dateNetToSap(DateTime.Today));
                itmBAPI.SetValue("BILL_DATE", ParametroDALC.dateNetToSap(pObjPedido.FechaFacturacion));
                itmBAPI.SetValue("DLV_BLOCK", pObjPedido.BloqueoEntrega);
                itmBAPI.SetValue("BILL_BLOCK", pObjPedido.BloqueoFactura);
                itmBAPI.SetValue("CSTCNDGRP1", pObjPedido.GrupoCond);
                itmBAPI.SetValue("ORD_REASON", pObjPedido.Motivo);
                itmBAPI.SetValue("PMNTTRMS", pObjPedido.CondPago);
                itmBAPI.SetValue("SHIP_COND", pObjPedido.CondExp);
                itmBAPI.SetValue("PURCH_NO_C", pObjPedido.OrdenCompra);
                itmBAPI.SetValue("CURRENCY", pObjPedido.Moneda);
                itmBAPI.SetValue("H_CURR", pObjPedido.TipoVisita);

                //itmBAPI.SetValue("DOC_TYPE", pObjPedido.CodTipoDoc);
                //itmBAPI.SetValue("DIVISION", pObjPedido.Sector);
                //itmBAPI.SetValue("PO_METHOD", pObjPedido.ClasePedidoCliente);
                if (pObjPedido.Reenbolsable)
                {
                    itmBAPI.SetValue("SHIP_TYPE", "X");
                }
                itmBAPI.SetValue("PURCH_NO_S", pObjPedido.nomProyecto);

                //agregado cod de proyecto y cod de version
                itmBAPI.SetValue("REC_POINT", pObjPedido.codProyecto);
                itmBAPI.SetValue("FKK_CONACCT", pObjPedido.codVersion);

                //modificar validez de la oferta:
                if (ParametroDALC.esOferta(pObjPedido.CodTipoDoc))
                {
                    itmBAPI.SetValue("QT_VALID_T", ParametroDALC.dateNetToSap(pObjPedido.FechaValidez));
                }
                itmBAPI.SetValue("PURCH_NO_S", pObjPedido.nomProyecto);
                //--- Campos Zs Servicios
                itmBAPI.SetValue("ADD_VAL_DY", pObjPedido.Znpiso);
                if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND")) //@@@@@ rhuapaya 16.08.2012
                {
                    itmBAPI.SetValue("TAX_CLASS9", pObjPedido.Zasensor ? "X" : "");
                    itmBAPI.SetValue("TAX_CLASS8", pObjPedido.Ztransporte);
                }
                List<string> correo = new List<string>(Regex.Split(pObjPedido.Mail, @"(?<=\G.{30})")); //rgutierrez 02.12.2011

                RfcStructureMetadata smTM = dest.Repository.GetStructureMetadata("BAPISDITM");
                RfcStructureMetadata smNR = dest.Repository.GetStructureMetadata("BAPIPARNR");
                RfcStructureMetadata smR1 = dest.Repository.GetStructureMetadata("BAPIADDR1");
                RfcStructureMetadata smND = dest.Repository.GetStructureMetadata("BAPICOND");
                RfcStructureMetadata smDL = dest.Repository.GetStructureMetadata("BAPISCHDL");
                RfcStructureMetadata smT2 = dest.Repository.GetStructureMetadata("BAPIRET2");
                RfcStructureMetadata smXT = dest.Repository.GetStructureMetadata("BAPISDTEXT");

                IRfcTable t_PARNR = smNR.CreateTable();
                IRfcStructure itmPARNR = smNR.CreateStructure();

                foreach (InterlocutorBE objInter in pObjPedido.Interlocutores)
                {
                    itmPARNR = smNR.CreateStructure();
                    itmPARNR.SetValue("PARTN_ROLE", objInter.Funcion);
                    if (objInter.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"))
                    {
                        itmPARNR.SetValue("UNLOAD_PT", objSolicitante.Cliente.Ruc.Trim() + "|" + objRestmp.Cliente.Ruc.Trim());
                    }
                    if (objInter.Funcion == ParametroDALC.getParamValueStatic("IlocDestMerc") || objInter.Funcion == ParametroDALC.getParamValueStatic("IlocDestFact"))
                    {
                        itmPARNR.SetValue("UNLOAD_PT", objSolicitante.Cliente.Ruc.Trim());
                    }
                    itmPARNR.SetValue("TELETEX_NO", correo[0]);
                    itmPARNR.SetValue("TELEX_NO", correo.Count > 1 ? correo[1] : "");

                    if (objInter.Funcion.Equals("Z3"))
                    {
                        itmPARNR.SetValue("NAME", objInter.Cliente.Descripcion);
                    }

                    if (ParametroDALC.esTipoX(objInter.Funcion, "IlocEmpresa"))
                    {
                        if (!string.IsNullOrEmpty(objInter.Cliente.Codigo))
                        {
                            //itmPARNR = smNR.CreateStructure();
                            //itmPARNR.SetValue("PARTN_ROLE", objInter.Funcion);
                            itmPARNR.SetValue("PARTN_NUMB", objInter.Cliente.Codigo);

                            if (!objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocAgTrans")))
                            {
                                //List<string> nombres = new List<string>(Regex.Split(objInter.Cliente.Descripcion, @"(?<=\G.{35})"));
                                itmPARNR.SetValue("NAME", objInter.Cliente.Descripcion.Length > 35 ? objInter.Cliente.Descripcion.Substring(0, 35) : objInter.Cliente.Descripcion);
                                itmPARNR.SetValue("NAME_2", objInter.Cliente.Descripcion.Length > 35 ? objInter.Cliente.Descripcion.Substring(35) : "");
                                //itmPARNR.SetValue("NAME_3", nombres.Count > 2 ? nombres[2] : "");
                                //itmPARNR.SetValue("NAME_4", nombres.Count > 3 ? nombres[3] : "");

                                //itmPARNR.SetValue("STREET", objInter.Cliente.Direccion);
                                itmPARNR.SetValue("REFOBJKEY", objInter.Cliente.Direccion);
                                itmPARNR.SetValue("POSTL_CODE", objInter.Cliente.CodigoPostal);
                                itmPARNR.SetValue("CITY", objInter.Cliente.Ciudad);
                                itmPARNR.SetValue("TELEPHONE", objInter.Cliente.Telefono);
                                itmPARNR.SetValue("TITLE", ParametroDALC.getParamValueStatic("Tratamiento"));
                                itmPARNR.SetValue("LANGU", "S");
                            }
                            itmPARNR.SetValue("COUNTRY", objInter.Cliente.Pais);
                            if (ParametroDALC.esTipoX(objInter.Funcion, "IlocDestMerc"))
                            {
                                itmPARNR.SetValue("TRANSPZONE", objInter.Cliente.TranspZone);
                            }
                            t_PARNR.Append(itmPARNR);
                        }
                    }
                    else if (ParametroDALC.esTipoX(objInter.Funcion, "IlocPersona"))
                    {
                        if (!string.IsNullOrEmpty(objInter.Persona.CodPersona))
                        {
                            //itmPARNR = smNR.CreateStructure();
                            itmPARNR.SetValue("COUNTRY", "PE");
                            itmPARNR.SetValue("TITLE", ParametroDALC.getParamValueStatic("Tratamiento"));
                            itmPARNR.SetValue("PARTN_NUMB", objInter.Persona.CodPersona);
                            t_PARNR.Append(itmPARNR);
                        }
                    }
                }
                //siempre tiene q mandar el Encargado Comercial!
                string pFuncEncComercial = ParametroDALC.getParamValueStatic("IlocVendedor1");


                int idx = 0; int idxF = 0;
                //foreach (IRfcStructure itxf  in t_PARNR)
                //{
                //    foreach (IRfcField itmf in itxf)
                //    {
                //        if (itmf.Metadata.Name == "PARTN_ROLE")
                //        {
                //            if(itmf.GetString() = pFuncEncComercial)
                //            {
                //                idxF = idx;
                //                break;
                //            }
                //        }
                //    }
                //    idx++;
                //}
                //int idx = Convert.ToInt32(t_PARNR.GetString("PARTN_ROLE", pFuncEncComercial));
                if (idx <= 0)
                {
                    itmPARNR = smNR.CreateStructure();
                    itmPARNR.SetValue("PARTN_ROLE", pFuncEncComercial);
                    t_PARNR.Append(itmPARNR);
                }

                IRfcTable t_SDITM = smTM.CreateTable();
                IRfcStructure itmSDITM = smTM.CreateStructure();

                IRfcTable t_COND = smND.CreateTable();
                IRfcStructure itmCOND; //= smND.CreateStructure();

                IRfcTable t_SCHDL = smDL.CreateTable();
                IRfcStructure itmSCHDL = smDL.CreateStructure();

                foreach (DetalleBE itm in pObjPedido.Detalle)
                {
                    foreach (RepartoBE itmRep in itm.Repartos)
                    {
                        if (itmRep.CantPed > 0m || itmRep.CantConf > 0m)
                        {
                            itmSCHDL = smDL.CreateStructure();
                            itmSCHDL.SetValue("ITM_NUMBER", itm.Posicion);
                            itmSCHDL.SetValue("SCHED_LINE", itmRep.Pos);

                            if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodReserva"))
                            {
                                itmRep.FechaEntrega = pObjPedido.Fecha.AddDays(Convert.ToDouble(ParametroDALC.getParamValueStatic("ValidezReserva")));
                            }
                            itmSCHDL.SetValue("REQ_DATE", ParametroDALC.dateNetToSap(itmRep.FechaEntrega));

                            //validación de documento de transporte:
                            if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodTransporte"))
                            {
                                itmSCHDL.SetValue("REQ_QTY", 1m);
                            }
                            else
                            {
                                itmSCHDL.SetValue("REQ_QTY", itmRep.CantPed);
                            }

                            t_SCHDL.Append(itmSCHDL);
                        }
                    }
                    itmSDITM = smTM.CreateStructure();
                    itmSDITM.SetValue("ITM_NUMBER", itm.Posicion);
                    itmSDITM.SetValue("MATERIAL", itm.CodMaterial.PadLeft(18, '0'));

                    if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodTransporte"))
                    {
                        itmSDITM.SetValue("UNTOF_WGHT", "KG");
                        itmSDITM.SetValue("GROSS_WGHT", itm.Cantidad);
                        itmSDITM.SetValue("NET_WEIGHT", itm.Cantidad);
                        itmSDITM.SetValue("TARGET_QTY", 1m);
                    }
                    else
                    {
                        if (!ParametroDALC.esTipoX(itm.TipoPosicion, "TipoCabCombo"))
                        {
                            itmSDITM.SetValue("GROSS_WGHT", itm.PesoNeto);
                            itmSDITM.SetValue("NET_WEIGHT", itm.PesoNeto);
                        }
                        itmSDITM.SetValue("UNTOF_WGHT", "KG");
                        itmSDITM.SetValue("TARGET_QTY", itm.Cantidad);
                    }

                    itmSDITM.SetValue("TARGET_QU", itm.CodUMedida);
                    itmSDITM.SetValue("PLANT", itm.CodCentro);

                    if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc.Trim().ToUpper(), "PedSinAlm"))
                    {
                        itmSDITM.SetValue("STORE_LOC", itm.CodAlmacen);
                    }
                    else
                    {
                        itm.CodAlmacen = string.Empty;
                    }

                    if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc.Trim().ToUpper(), "CodSinLote"))
                    {
                        itmSDITM.SetValue("BATCH", itm.CodLote);
                    }
                    else
                    {
                        itm.CodLote = string.Empty;
                    }

                    itmSDITM.SetValue("DLV_PRIO", itm.PrioridadEntrega);
                    itmSDITM.SetValue("PRC_GROUP1", itm.CodGrupoMat);
                    itmSDITM.SetValue("REASON_REJ", itm.MotivoRechazo);
                    itmSDITM.SetValue("SHORT_TEXT", itm.DescMaterial);
                    itmSDITM.SetValue("ITEM_CATEG", itm.TipoPosicion);
                    //rhuapaya 02052013 se comentó porque no registra los kits.
                    //itmSDITM.SetValue("HG_LV_ITEM", itm.PosSup);
                    itmSDITM.SetValue("HG_LV_ITEM", itm.PosSup);

                    //si es tipopos cabecera Combo, busca los hijos para cambiar reparto, grp mat, 
                    if (ParametroDALC.esTipoCabComboStatic(itm.TipoPosicion) &&
                        ParametroDALC.esTipoCabKitStatic(itm.TipoPosicion))
                    {
                        List<DetalleBE> lstAux = pObjPedido.Detalle.FindAll(X => X.PosSup == itm.Posicion);
                        foreach (DetalleBE itmAux in lstAux)
                        {
                            itmAux.Cantidad = itmAux.CantComp * itm.Cantidad;
                            //si UM = UNidad => redondear al entero mayor
                            if (ParametroDALC.esTipoX(itmAux.CodUMedida, "UMUnidad"))
                            {
                                itmAux.Cantidad = (itmAux.Cantidad > decimal.Truncate(itmAux.Cantidad)) ? decimal.Truncate(itmAux.Cantidad) + 1 : itmAux.Cantidad;
                            }
                            itmAux.CodGrupoMat = itm.CodGrupoMat;
                            itmAux.PrioridadEntrega = itm.PrioridadEntrega;
                        }
                    }
                    itmSDITM.SetValue("TAX_CLASS9", itm.Zservicio ? "X" : "");
                    //itmSDITM.SetValue("TAX_CLASS9", "X");
                    t_SDITM.Append(itmSDITM);
                    //CONDICIONES
                    if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCZP01"))
                    {
                        if (itm.Diferencia.Importe != 0m) //---- enviar la condición de Diferencia para NC x dif precio
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", itm.Diferencia.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.Diferencia.Importe * .1m);
                            itmCOND.SetValue("COND_ST_NO", "111");
                            itmCOND.SetValue("COND_COUNT", "01");
                            //ref_Order_conditions_in.Add(icond);
                            t_COND.Append(itmCOND);
                        }
                    }
                    else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ"))
                    {
                        if (itm.DctoZD06.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", itm.DctoZD06.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoZD06.Importe);
                            itmCOND.SetValue("COND_ST_NO", "111");
                            itmCOND.SetValue("COND_COUNT", "01");
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DctoZD07.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", itm.DctoZD07.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoZD07.Importe);
                            itmCOND.SetValue("COND_ST_NO", "111");
                            itmCOND.SetValue("COND_COUNT", "01");
                            t_COND.Append(itmCOND);
                        }
                        if (itm.PreZP08.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", itm.PreZP08.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.PreZP08.Importe);
                            itmCOND.SetValue("COND_ST_NO", "111");
                            itmCOND.SetValue("COND_COUNT", "01");
                            t_COND.Append(itmCOND);
                        }
                    }
                    else
                    {
                        if (itm.DctoDecorPorc.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", itm.DctoDecorPorc.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoDecorPorc.Importe);
                            itmCOND.SetValue("COND_ST_NO", "120");
                            itmCOND.SetValue("COND_COUNT", "01");
                            t_COND.Append(itmCOND);
                        }

                        if (itm.DctoAdicionalPorc.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", itm.DctoAdicionalPorc.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoAdicionalPorc.Importe);
                            itmCOND.SetValue("COND_ST_NO", "122");
                            itmCOND.SetValue("COND_COUNT", "01");
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DctoEstadisticoPorc.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", itm.DctoEstadisticoPorc.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoEstadisticoPorc.Importe);
                            itmCOND.SetValue("COND_ST_NO", "960");
                            itmCOND.SetValue("COND_COUNT", "01");
                            t_COND.Append(itmCOND);
                        }

                        if (itm.DctoGerenciaPorc.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", itm.DctoGerenciaPorc.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoGerenciaPorc.Importe);
                            itmCOND.SetValue("COND_ST_NO", "123");
                            itmCOND.SetValue("COND_COUNT", "01");
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DctoGerenciaMonto.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", itm.DctoGerenciaMonto.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoGerenciaMonto.Importe * .1m);
                            itmCOND.SetValue("COND_ST_NO", "125");
                            itmCOND.SetValue("COND_COUNT", "01");
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DctoGenerico.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", itm.DctoGenerico.Condicion);
                            itmCOND.SetValue("COND_VALUE", itm.DctoGenerico.Importe);
                            itmCOND.SetValue("COND_ST_NO", "121");
                            itmCOND.SetValue("COND_COUNT", "01");
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DctoZD11.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", ParametroDALC.getParamValueStatic("CondZD11"));
                            itmCOND.SetValue("COND_VALUE", itm.DctoZD11.Importe);
                            itmCOND.SetValue("COND_ST_NO", "124");
                            itmCOND.SetValue("COND_COUNT", "01");
                            t_COND.Append(itmCOND);
                        }
                        if (itm.DctoGenericoZD08.Importe != 0m)
                        {
                            itmCOND = smND.CreateStructure();
                            itmCOND.SetValue("ITM_NUMBER", itm.Posicion);
                            itmCOND.SetValue("COND_TYPE", ParametroDALC.getParamValueStatic("CondDctosZD08"));
                            itmCOND.SetValue("COND_VALUE", itm.DctoGenericoZD08.Importe);
                            itmCOND.SetValue("COND_ST_NO", "113");
                            itmCOND.SetValue("COND_COUNT", "01");
                            t_COND.Append(itmCOND);
                        }
                    }
                }
                //tabla de textos
                IRfcTable t_SDTEXT = smXT.CreateTable();
                IEnumerable<string> ret = null;
                IRfcStructure itmSDTEXT = smXT.CreateStructure();
                // foreach (TextoBE objTextoItm in pObjPedido.Textos)
                // {
                //   if (objTextoItm.Descripcion.Length > 132) {
                //       ret = Split(objTextoItm.Descripcion, 130);
                // }                    
                //}

                foreach (TextoBE objTextoItm in pObjPedido.Textos)
                {


                    if (objTextoItm.Descripcion.Length > 132)
                    {
                        ret = Split(objTextoItm.Descripcion, 131);
                    }

                    if (ret == null)
                    {
                        itmSDTEXT = smXT.CreateStructure();
                        itmSDTEXT.SetValue("TEXT_ID", objTextoItm.CodTexto);
                        itmSDTEXT.SetValue("TEXT_LINE", objTextoItm.Descripcion);
                        itmSDTEXT.SetValue("LANGU", objTextoItm.Langu);
                        t_SDTEXT.Append(itmSDTEXT);
                    }
                    else
                    {
                        foreach (string item in ret)
                        {
                            itmSDTEXT = smXT.CreateStructure();
                            itmSDTEXT.SetValue("TEXT_ID", objTextoItm.CodTexto);
                            itmSDTEXT.SetValue("TEXT_LINE", item);
                            itmSDTEXT.SetValue("LANGU", objTextoItm.Langu);
                            t_SDTEXT.Append(itmSDTEXT);
                        }
                        ret = null;
                    }


                }

                t_RET2 = smT2.CreateTable();
                IRfcStructure itmRET2 = smT2.CreateStructure();

                t_BAPI.Append(itmBAPI);
                //-- verificar si se crea pedido/oferta/NC:
                if (ParametroDALC.esOferta(pObjPedido.CodTipoDoc) && !pObjPedido.CodTipoDoc.Equals("Z004"))
                {
                    function = dest.Repository.CreateFunction("ZWEB_MODIFICAR_OFERTA");
                    function.SetValue("P_VBELN", pObjPedido.NumPedido);
                    function.SetValue("T_HEADER_IN", t_BAPI);
                    function.SetValue("T_ITEM_IN", t_SDITM);
                    function.SetValue("T_PARTNERS", t_PARNR);
                    function.SetValue("T_CONDITIONS_IN", t_COND);
                    function.SetValue("T_SCHEDULES_IN", t_SCHDL);
                    function.SetValue("T_RETURN", t_RET2);
                    function.SetValue("T_TEXT", t_SDTEXT);
                    function.Invoke(dest);
                    //ex_Salesdocument = function.GetString("P_VBELN");
                    returnValue = function.GetString("P_OK");
                }
                else
                {
                    IRfcTable tcsh = smDL.CreateTable();
                    tcsh.Append(t_SCHDL);
                    if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                    {
                        itmSCHDL = smDL.CreateStructure();
                        tcsh.Append(itmSCHDL);
                    }
                    function = dest.Repository.CreateFunction("ZWEB_MODIFICAR_PEDIDO");
                    function.SetValue("P_VBELN", pObjPedido.NumPedido);
                    function.SetValue("T_HEADER_IN", t_BAPI);
                    function.SetValue("T_ITEM_IN", t_SDITM);
                    function.SetValue("T_PARTNERS", t_PARNR);
                    function.SetValue("T_CONDITIONS_IN", t_COND);
                    function.SetValue("T_SCHEDULES_IN", tcsh);
                    function.SetValue("T_RETURN", t_RET2);
                    function.SetValue("T_TEXT", t_SDTEXT);
                    function.Invoke(dest);
                    //ex_Salesdocument = function.GetString("P_VBELN");
                    returnValue = function.GetString("P_OK");
                }

                foreach (IRfcStructure itemRet in t_RET2)
                {
                    retVal += (itemRet.GetString("TYPE") == "E") || (itemRet.GetString("TYPE") == "A") ? itemRet.GetString("MESSAGE") + ". " : "";
                    if ((itemRet.GetString("MESSAGE_V1") == "ZMENG" || itemRet.GetString("MESSAGE_V1") == "LPRIO") && itemRet.GetString("MESSAGE_V2") == "VBAPKOM")
                    {
                        retMsg = "Pedido con posición concluida, activar posición. ";
                    }
                    else
                    {
                        retMsg += (itemRet.GetString("TYPE") != "S" && itemRet.GetString("TYPE") != "W") ? itemRet.GetString("MESSAGE") + ". " : "";
                    }

                }
                if (string.IsNullOrEmpty(retVal))
                {
                    pOk = true;
                    //ClienteBE _objClienteBE = (ClienteDALC.Instance(this._connId)).leer(pObjPedido.CodCliente);
                    //if (objClienteBE != null && _objClienteBE.Eventual)
                    //{
                    //    //--- grabar nif
                    //    //this.grabarNIF(pObjPedido);
                    //}
                    IRfcStructure rfcS = t_RET2[t_RET2.Count - 1];
                    if (rfcS.GetString("TYPE") == "S")
                    {
                        retVal += rfcS.GetString("MESSAGE") + " ";
                    }
                    else
                    {
                        retVal += "Doc. de venta " + pObjPedido.NumPedido + " se ha grabado.";
                    }
                    //foreach (IRfcStructure item in t_RET2)
                    //{
                    //    if (item.GetString("TYPE") == "S")
                    //    {
                    //        retVal += item.GetString("MESSAGE") + " ";
                    //    }
                    //    else
                    //    {
                    //        retVal += "Doc. de venta " + pObjPedido.NumPedido + " se ha grabado.";
                    //    }
                    //}
                }
                else
                {
                    pOk = false;
                    //--- si hubo error, muestra todo el mensaje de error.
                    retVal = retMsg;
                }
            }
            catch (RfcCommunicationException ex)
            {
                pOk = false;
                retVal = "Confirme nuevamente la operación por favor.";
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);

            }
            return retVal;
        }

        public string reaprovisionar(out bool pOk, DECOR.BL.BE.PedidoBE pObjPedido)
        {
            PedidoBE retObj = new PedidoBE();
            List<DetalleBE> lstDetalle = new List<DetalleBE>();
            IRfcFunction function = null; RfcDestination dest = null;
            //-------------------
            string p_Ok = "", retVal = "";
            pOk = true;
            DestConfig dc = new DestConfig();
            try
            {
                dest = DALC.getDestination(out dc);
                RfcStructureMetadata sm = dest.Repository.GetStructureMetadata("BAPISDH1");
                IRfcTable t_header_in = sm.CreateTable();
                IRfcStructure t_header_in_item = sm.CreateStructure();

                t_header_in_item.SetValue("SALES_GRP", pObjPedido.CodGrupoVend);
                t_header_in_item.SetValue("SALES_OFF", pObjPedido.CodOficina);
                t_header_in_item.SetValue("DISTR_CHAN", pObjPedido.CanalDist);
                t_header_in_item.SetValue("SALES_ORG", pObjPedido.OrgVentas);
                t_header_in_item.SetValue("REQ_DATE_H", pObjPedido.Fecha.ToString());
                t_header_in_item.SetValue("DOC_DATE", pObjPedido.Fecha.ToString());
                t_header_in_item.SetValue("BILL_DATE", pObjPedido.FechaFacturacion.ToString());
                t_header_in_item.SetValue("DLV_BLOCK", pObjPedido.BloqueoEntrega);
                t_header_in_item.SetValue("BILL_BLOCK", pObjPedido.BloqueoFactura);
                t_header_in_item.SetValue("CSTCNDGRP1", pObjPedido.GrupoCond);
                t_header_in_item.SetValue("ORD_REASON", pObjPedido.Motivo);
                t_header_in_item.SetValue("PMNTTRMS", pObjPedido.CondPago);
                t_header_in_item.SetValue("SHIP_COND", pObjPedido.CondExp);
                t_header_in_item.SetValue("PURCH_NO_C", pObjPedido.OrdenCompra);
                t_header_in_item.SetValue("CURRENCY", pObjPedido.Moneda);
                if (ParametroDALC.esOferta(pObjPedido.CodTipoDoc))
                {
                    t_header_in_item.SetValue("QT_VALID_T", pObjPedido.FechaValidez.ToString());
                }
                t_header_in_item.SetValue("ADD_VAL_DY", pObjPedido.Znpiso);
                t_header_in_item.SetValue("TAX_CLASS9", pObjPedido.Zasensor ? "X" : "");
                t_header_in_item.SetValue("TAX_CLASS8", pObjPedido.Ztransporte);

                t_header_in.Append(t_header_in_item);
                //INTERLOCUTORES
                RfcStructureMetadata smPartn = dest.Repository.GetStructureMetadata("BAPIPARNR");
                IRfcTable t_partners = smPartn.CreateTable();
                foreach (InterlocutorBE iloc in pObjPedido.Interlocutores)
                {
                    IRfcStructure t_partners_item = smPartn.CreateStructure();
                    t_partners_item.SetValue("PARTN_ROLE", iloc.Funcion);
                    t_partners_item.SetValue("REFOBJKEY", pObjPedido.Mail);
                    if (iloc.Funcion.Equals("Z3"))
                    {
                        t_partners_item.SetValue("NAME", iloc.Cliente.Descripcion);
                    }
                    if (ParametroDALC.esTipoX(iloc.Funcion, "IlocEmpresa"))
                    {
                        if (!string.IsNullOrEmpty(iloc.Cliente.Codigo))
                        {
                            t_partners_item.SetValue("PARTN_NUMB", iloc.Cliente.Codigo);
                            if (!iloc.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocAgTrans")))
                            {
                                t_partners_item.SetValue("NAME", iloc.Cliente.Descripcion.Length > 35 ? iloc.Cliente.Descripcion.Substring(0, 35) : iloc.Cliente.Descripcion);
                                t_partners_item.SetValue("NAME_2", iloc.Cliente.Descripcion.Length > 35 ? iloc.Cliente.Descripcion.Substring(35) : "");
                                t_partners_item.SetValue("STREET", iloc.Cliente.Direccion);
                                t_partners_item.SetValue("POSTL_CODE", iloc.Cliente.CodigoPostal);
                                t_partners_item.SetValue("CITY", iloc.Cliente.Ciudad);
                                t_partners_item.SetValue("TELEPHONE", iloc.Cliente.Telefono);
                                t_partners_item.SetValue("TITLE", ParametroDALC.getParamValueStatic("Tratamiento"));
                                t_partners_item.SetValue("LANGU", "S");
                            }
                            t_partners_item.SetValue("COUNTRY", iloc.Cliente.Pais);
                            t_partners.Append(t_partners_item);
                        }
                    }
                    else if (ParametroDALC.esTipoX(iloc.Funcion, "IlocPersona"))
                    {
                        if (!string.IsNullOrEmpty(iloc.Persona.CodPersona))
                        {
                            t_partners_item.SetValue("COUNTRY", "PE");
                            t_partners_item.SetValue("LANGU", "S");
                            t_partners_item.SetValue("TITLE", ParametroDALC.getParamValueStatic("Tratamiento"));
                            t_partners_item.SetValue("PARTN_NUMB", iloc.Persona.CodPersona);
                            t_partners.Append(t_partners_item);
                        }
                    }
                }
                //siempre tiene q mandar el Encargado Comercial!
                int idx = 0;
                string pFuncEncComercial = ParametroDALC.getParamValueStatic("IlocVendedor1");
                foreach (IRfcStructure item in t_partners)
                {
                    foreach (IRfcField itmF in item)
                    {
                        if (itmF.Metadata.Name == "PARTN_ROLE")
                        {
                            if (itmF.GetString() == "VE")
                            {
                                idx = item.Metadata.NameToIndex("VE");
                            }
                        }
                    }
                }

                if (idx <= 0)
                {
                    IRfcStructure t_partners_itemVE = smPartn.CreateStructure();
                    t_partners_itemVE.SetValue("PARTN_ROLE", pFuncEncComercial);
                    t_partners.Append(t_partners_itemVE);
                }

                RfcStructureMetadata smSchdl = dest.Repository.GetStructureMetadata("BAPISCHDL");
                RfcStructureMetadata smItem = dest.Repository.GetStructureMetadata("BAPISDITM");
                RfcStructureMetadata smCond = dest.Repository.GetStructureMetadata("BAPICOND");

                IRfcTable t_schdl_in = smSchdl.CreateTable();
                IRfcTable t_item_in = smItem.CreateTable();
                IRfcTable t_conditions_in = smCond.CreateTable();

                foreach (DetalleBE objDetalle in pObjPedido.Detalle)
                {
                    //--- schedule / vbep / repartos
                    IRfcStructure t_schdl_in_item = smSchdl.CreateStructure();
                    foreach (RepartoBE itmRep in objDetalle.Repartos)
                    {
                        if (itmRep.CantPed > 0m || itmRep.CantConf > 0m)
                        {
                            t_schdl_in_item = smSchdl.CreateStructure();
                            t_schdl_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                            t_schdl_in_item.SetValue("SCHED_LINE", itmRep.Pos);

                            if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodReserva"))
                            {
                                itmRep.FechaEntrega = pObjPedido.Fecha.AddDays(Convert.ToDouble(ParametroDALC.getParamValueStatic("ValidezReserva")));
                            }
                            t_schdl_in_item.SetValue("REQ_DATE", ParametroDALC.dateNetToSap(itmRep.FechaEntrega));
                            //validación de documento de transporte:
                            if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodTransporte"))
                            {
                                t_schdl_in_item.SetValue("REQ_QTY", 1m);
                            }
                            else
                            {
                                t_schdl_in_item.SetValue("REQ_QTY", itmRep.CantPed);
                            }
                            t_schdl_in.Append(t_schdl_in_item);
                        }
                    }

                    IRfcStructure t_item_in_item = smItem.CreateStructure();
                    t_item_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                    t_item_in_item.SetValue("MATERIAL", objDetalle.CodMaterial);
                    if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodTransporte"))
                    {
                        t_item_in_item.SetValue("UNTOF_WGHT", "KG");
                        t_item_in_item.SetValue("GROSS_WGHT", objDetalle.Cantidad);
                        t_item_in_item.SetValue("NET_WEIGHT", objDetalle.Cantidad);
                        t_item_in_item.SetValue("TARGET_QTY", 1m);
                    }
                    else
                    {
                        t_item_in_item.SetValue("UNTOF_WGHT", "KG");
                        t_item_in_item.SetValue("GROSS_WGHT", objDetalle.PesoNeto);
                        t_item_in_item.SetValue("NET_WEIGHT", objDetalle.PesoNeto);
                        t_item_in_item.SetValue("TARGET_QTY", objDetalle.Cantidad);
                    }
                    t_item_in_item.SetValue("PLANT", objDetalle.CodCentro);
                    t_item_in_item.SetValue("STORE_LOC", objDetalle.CodAlmacen);
                    t_item_in_item.SetValue("BATCH", objDetalle.CodLote);
                    t_item_in_item.SetValue("DLV_PRIO", objDetalle.PrioridadEntrega);
                    t_item_in_item.SetValue("PRC_GROUP1", objDetalle.CodGrupoMat);
                    t_item_in_item.SetValue("REASON_REJ", objDetalle.MotivoRechazo);
                    t_item_in_item.SetValue("SHORT_TEXT", objDetalle.DescMaterial);
                    //--- tipo de posición
                    t_item_in_item.SetValue("ITEM_CATEG", objDetalle.TipoPosicion);
                    t_item_in_item.SetValue("HG_LV_ITEM", objDetalle.PosSup);
                    //si es tipopos cabecera Combo, busca los hijos para cambiar reparto, grp mat, 
                    if (ParametroDALC.esTipoCabComboStatic(objDetalle.TipoPosicion) &&
                        ParametroDALC.esTipoCabKitStatic(objDetalle.TipoPosicion))
                    {
                        List<DetalleBE> lstAux = pObjPedido.Detalle.FindAll(X => X.PosSup == objDetalle.Posicion);
                        foreach (DetalleBE itmAux in lstAux)
                        {
                            itmAux.Cantidad = itmAux.CantComp * objDetalle.Cantidad;
                            //si UM = UNidad => redondear al entero mayor
                            if (ParametroDALC.esTipoX(itmAux.CodUMedida, "UMUnidad"))
                            {
                                itmAux.Cantidad = (itmAux.Cantidad > decimal.Truncate(itmAux.Cantidad)) ? decimal.Truncate(itmAux.Cantidad) + 1 : itmAux.Cantidad;
                            }

                            itmAux.CodGrupoMat = objDetalle.CodGrupoMat;
                            itmAux.PrioridadEntrega = objDetalle.PrioridadEntrega;
                        }
                    }
                    //--- campos Zs Servicios
                    t_item_in_item.SetValue("TAX_CLASS9", objDetalle.Zservicio ? "X" : "");
                    //--- añadir a tabla de items
                    t_item_in.Append(t_item_in_item);
                    //-- condiciones
                    IRfcStructure t_conditions_in_item = smCond.CreateStructure();
                    if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCZP01"))
                    {
                        if (objDetalle.Diferencia.Importe != 0m)
                        {
                            t_conditions_in_item = smCond.CreateStructure();
                            t_conditions_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                            t_conditions_in_item.SetValue("COND_TYPE", objDetalle.Diferencia.Condicion);
                            t_conditions_in_item.SetValue("COND_VALUE", objDetalle.Diferencia.Importe * .1m);
                            t_conditions_in_item.SetValue("COND_ST_NO", "111");
                            t_conditions_in_item.SetValue("COND_COUNT", "01");
                            t_conditions_in.Append(t_conditions_in_item);
                        }
                    }
                    else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ"))
                    {
                        if (objDetalle.DctoZD06.Importe != 0m)
                        {
                            t_conditions_in_item = smCond.CreateStructure();
                            t_conditions_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                            t_conditions_in_item.SetValue("COND_TYPE", objDetalle.DctoZD06.Condicion);
                            t_conditions_in_item.SetValue("COND_VALUE", objDetalle.DctoZD06.Importe);
                            t_conditions_in_item.SetValue("COND_ST_NO", "111");
                            t_conditions_in_item.SetValue("COND_COUNT", "01");
                            t_conditions_in.Append(t_conditions_in_item);
                        }
                        else if (objDetalle.DctoZD07.Importe != 0m)
                        {
                            t_conditions_in_item = smCond.CreateStructure();
                            t_conditions_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                            t_conditions_in_item.SetValue("COND_TYPE", objDetalle.DctoZD07.Condicion);
                            t_conditions_in_item.SetValue("COND_VALUE", objDetalle.DctoZD07.Importe);
                            t_conditions_in_item.SetValue("COND_ST_NO", "112");
                            t_conditions_in_item.SetValue("COND_COUNT", "01");
                            t_conditions_in.Append(t_conditions_in_item);
                        }

                        if (objDetalle.PreZP08.Importe != 0m)
                        {
                            t_conditions_in_item = smCond.CreateStructure();
                            t_conditions_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                            t_conditions_in_item.SetValue("COND_TYPE", objDetalle.PreZP08.Condicion);
                            t_conditions_in_item.SetValue("COND_VALUE", objDetalle.PreZP08.Importe * .1m);
                            t_conditions_in_item.SetValue("COND_ST_NO", "111");
                            t_conditions_in_item.SetValue("COND_COUNT", "01");
                            t_conditions_in.Append(t_conditions_in_item);
                        }
                    }
                    else
                    {
                        if (objDetalle.DctoDecorPorc.Importe != 0m)
                        {
                            t_conditions_in_item = smCond.CreateStructure();
                            t_conditions_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                            t_conditions_in_item.SetValue("COND_TYPE", objDetalle.DctoDecorPorc.Condicion);
                            t_conditions_in_item.SetValue("COND_VALUE", objDetalle.DctoDecorPorc.Importe);
                            t_conditions_in_item.SetValue("COND_ST_NO", "120");
                            t_conditions_in_item.SetValue("COND_COUNT", "01");
                            t_conditions_in.Append(t_conditions_in_item);
                        }
                        else if (objDetalle.DctoAdicionalPorc.Importe != 0m)
                        {
                            t_conditions_in_item = smCond.CreateStructure();
                            t_conditions_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                            t_conditions_in_item.SetValue("COND_TYPE", objDetalle.DctoAdicionalPorc.Condicion);
                            t_conditions_in_item.SetValue("COND_VALUE", objDetalle.DctoAdicionalPorc.Importe);
                            t_conditions_in_item.SetValue("COND_ST_NO", "122");
                            t_conditions_in_item.SetValue("COND_COUNT", "01");
                            t_conditions_in.Append(t_conditions_in_item);
                        }
                        else if (objDetalle.DctoEstadisticoPorc.Importe != 0m)
                        {
                            t_conditions_in_item = smCond.CreateStructure();
                            t_conditions_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                            t_conditions_in_item.SetValue("COND_TYPE", objDetalle.DctoEstadisticoPorc.Condicion);
                            t_conditions_in_item.SetValue("COND_VALUE", objDetalle.DctoEstadisticoPorc.Importe);
                            t_conditions_in_item.SetValue("COND_ST_NO", "123");
                            t_conditions_in_item.SetValue("COND_COUNT", "01");
                            t_conditions_in.Append(t_conditions_in_item);
                        }
                        else if (objDetalle.DctoGerenciaPorc.Importe != 0m)
                        {
                            t_conditions_in_item = smCond.CreateStructure();
                            t_conditions_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                            t_conditions_in_item.SetValue("COND_TYPE", objDetalle.DctoGerenciaPorc.Condicion);
                            t_conditions_in_item.SetValue("COND_VALUE", objDetalle.DctoGerenciaPorc.Importe);
                            t_conditions_in_item.SetValue("COND_ST_NO", "124");
                            t_conditions_in_item.SetValue("COND_COUNT", "01");
                            t_conditions_in.Append(t_conditions_in_item);
                        }
                        else if (objDetalle.DctoGerenciaMonto.Importe != 0m)
                        {
                            t_conditions_in_item = smCond.CreateStructure();
                            t_conditions_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                            t_conditions_in_item.SetValue("COND_TYPE", objDetalle.DctoGerenciaMonto.Condicion);
                            t_conditions_in_item.SetValue("COND_VALUE", objDetalle.DctoGerenciaMonto.Importe * .1m);
                            t_conditions_in_item.SetValue("COND_ST_NO", "125");
                            t_conditions_in_item.SetValue("COND_COUNT", "01");
                            t_conditions_in.Append(t_conditions_in_item);
                        }
                        else if (objDetalle.DsctoAdicionalZD12.Importe != 0m) //rhuapaya 25.06.2012 @@@
                        {
                            t_conditions_in_item = smCond.CreateStructure();
                            t_conditions_in_item.SetValue("ITM_NUMBER", objDetalle.Posicion);
                            t_conditions_in_item.SetValue("COND_TYPE", objDetalle.DsctoAdicionalZD12.Condicion);
                            t_conditions_in_item.SetValue("COND_VALUE", objDetalle.DsctoAdicionalZD12.Importe * .1m);
                            t_conditions_in_item.SetValue("COND_ST_NO", "130");
                            t_conditions_in_item.SetValue("COND_COUNT", "01");
                            t_conditions_in.Append(t_conditions_in_item);
                        }
                    }
                }

                RfcStructureMetadata smText = dest.Repository.GetStructureMetadata("BAPISDTEXT");
                IRfcTable t_text = smText.CreateTable();
                foreach (TextoBE objTextoItm in pObjPedido.Textos)
                {
                    IRfcStructure itm = smText.CreateStructure();
                    itm.SetValue("TEXT_ID", objTextoItm.CodTexto);
                    itm.SetValue("TEXT_LINE", objTextoItm.Descripcion);
                    itm.SetValue("LANGU", objTextoItm.Langu);
                    t_text.Append(itm);
                }

                RfcStructureMetadata smReturn = dest.Repository.GetStructureMetadata("BAPIRET2");
                IRfcTable t_return = smReturn.CreateTable();

                function = dest.Repository.CreateFunction("ZWEB_REAPROVISIONAR");
                function.SetValue("T_HEADER_IN", t_header_in);
                function.SetValue("T_PARTNERS", t_partners);
                function.SetValue("T_ITEM_IN", t_item_in);
                function.SetValue("T_CONDITIONS_IN", t_header_in);
                function.SetValue("T_TEXT", t_text);
                function.SetValue("T_SCHEDULES_IN", t_schdl_in);
                function.Invoke(dest);

                string retMsg = "";
                foreach (IRfcStructure itemRet in t_return)
                {
                    retVal += (itemRet["Type"].GetString() != "S") ? itemRet["Message"].GetString() + "," : "";
                    retMsg += (itemRet["Type"].GetString() == "S") ? itemRet["Message"].GetString() + "," : "";
                }
                if (string.IsNullOrEmpty(retVal))
                {
                    pOk = true;
                    IRfcStructure itemRet = t_return[t_return.Count - 1];
                    if (itemRet["Type"].GetString() == "S" && !itemRet["Message"].GetString().Equals(""))
                    {
                        retVal = "Las posiciones " + itemRet["Message"].GetString() + " fueron reaprovisionadas. El pedido fue grabado.";
                        retVal.Replace('/', '-');
                    }
                    else
                    {
                        retVal = "No fue reaprovisionado el pedido.";
                    }
                }
                else
                {
                    pOk = false;
                }
            }
            catch (RfcCommunicationException ex)
            {
                pOk = false;
                retVal = "Confirme nuevamente la operación por favor.";
            }
            catch
            {

            }
            finally
            {

            }

            return retVal;
        }

        /// <summary>
        /// función para calcular los precios (Zweb_Calcular_Precio)
        /// </summary>
        /// <param name="pObjPedido">obj con info del doc.</param>
        /// <param name="pItem">obj con el item que se va a tratar</param>
        /// <param name="retval">mensaje de error o vacío si no hay error</param>
        /// <returns>Lista de condiciones</returns>
        public List<DECOR.BL.BE.DescuentoBE> calcularPrecios(DECOR.BL.BE.PedidoBE pObjPedido, DECOR.BL.BE.DetalleBE pItem, out string retval)
        {
            string p_Ok = "", p_Msg = "", p_band = "";
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DescuentoBE obj = null;
            List<DescuentoBE> lstDescuentos = new List<DescuentoBE>();
            DestConfig dc = new DestConfig();
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                RfcStructureMetadata sm = dest.Repository.GetStructureMetadata("BAPICOND");

                //IRfcTable t_cond = function.GetTable("T_COND");
                IRfcTable t_cond = sm.CreateTable();

                if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ"))
                {
                    // Enviar precio especial cuando es flete/servicio especial
                    if (pItem.Material.EspecialServ || ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedProy"))
                    {
                        if (pItem.PreZP08 != null && pItem.PreZP08.Importe != 0m)
                        {
                            IRfcStructure itm = sm.CreateStructure();
                            itm.SetValue("ITM_NUMBER", pItem.Posicion);
                            itm.SetValue("COND_TYPE", pItem.PreZP08.Condicion);
                            itm.SetValue("COND_VALUE", pItem.PreZP08.Importe);
                            t_cond.Append(itm);
                        }
                    }
                }
                {
                    IRfcStructure itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ") ? "ZP07" : pItem.Precio.Condicion);
                    if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ2"))
                    {
                        itm.SetValue("COND_TYPE", "ZP03"); // mtejada: 25.08.2011 para docs Z005 y ZO02
                    }
                    itm.SetValue("COND_VALUE", pItem.Precio.Importe);

                    t_cond.Append(itm);
                }

                if (pItem.DctoDecorPorc != null && pItem.DctoDecorPorc.Importe != 0m)
                {
                    IRfcStructure itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", pItem.DctoDecorPorc.Condicion);
                    //rgutierrez 13.01.2012 Al modificar el descuento se estaba aplicando nuevamente la rebaja de 3% para pago con tarjeta de credito
                    itm.SetValue("COND_VALUE", Math.Abs(pItem.DctoDecorPorc.Importe));
                    if (pItem.DctoDecorPorc.ImporteAnterior != pItem.DctoDecorPorc.Importe)
                    {
                        p_band = "1";
                    }

                    t_cond.Append(itm);
                }

                if (pItem.DctoAdicionalPorc != null && pItem.DctoAdicionalPorc.Importe != 0m)
                {
                    IRfcStructure itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", pItem.DctoAdicionalPorc.Condicion);
                    //rgutierrez 13.01.2012
                    itm.SetValue("COND_VALUE", Math.Abs(pItem.DctoAdicionalPorc.Importe));
                    t_cond.Append(itm);
                }

                if (pItem.DctoGerenciaPorc != null && pItem.DctoGerenciaPorc.Importe != 0m)
                {
                    IRfcStructure itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", pItem.DctoGerenciaPorc.Condicion);
                    //rgutierrez 13.01.2012
                    itm.SetValue("COND_VALUE", Math.Abs(pItem.DctoGerenciaPorc.Importe));
                    t_cond.Append(itm);
                }

                if (pItem.DctoGerenciaMonto != null && pItem.DctoGerenciaMonto.Importe != 0m)
                {
                    IRfcStructure itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", pItem.DctoGerenciaMonto.Condicion);
                    //rgutierrez 13.01.2012
                    itm.SetValue("COND_VALUE", Math.Abs(pItem.DctoGerenciaMonto.Importe));
                    t_cond.Append(itm);
                }

                if (pItem.DctoZD06 != null && pItem.DctoZD06.Importe != 0m)
                {
                    IRfcStructure itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", pItem.DctoZD06.Condicion);
                    //rgutierrez 13.01.2012
                    itm.SetValue("COND_VALUE", Math.Abs(pItem.DctoZD06.Importe));
                    t_cond.Append(itm);
                }

                //RGF 20111108
                if (pItem.DctoGenericoZD08 != null && pItem.DctoGenericoZD08.Importe != 0m)
                {
                    IRfcStructure itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", pItem.DctoGenericoZD08.Condicion);
                    //rgutierrez 13.01.2012
                    itm.SetValue("COND_VALUE", Math.Abs(pItem.DctoGenericoZD08.Importe));
                    t_cond.Append(itm);
                }

                if (pItem.DctoGenerico != null && pItem.DctoGenerico.Importe != 0m) //ZD09
                {
                    IRfcStructure itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", pItem.DctoGenerico.Condicion);
                    //rgutierrez 13.01.2012
                    itm.SetValue("COND_VALUE", Math.Abs(pItem.DctoGenerico.Importe));
                    t_cond.Append(itm);
                }

                if (pItem.DctoZD11 != null && pItem.DctoZD11.Importe != 0m)
                {
                    IRfcStructure itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", pItem.DctoZD11.Condicion);
                    //rgutierrez 13.01.2012
                    itm.SetValue("COND_VALUE", Math.Abs(pItem.DctoZD11.Importe));
                    t_cond.Append(itm);
                }
                //rhuapaya 25.06.2012 @@@
                if (pItem.DsctoAdicionalZD12 != null && pItem.DsctoAdicionalZD12.Importe != 0m)
                {
                    IRfcStructure itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", "ZD12");
                    itm.SetValue("COND_VALUE", Math.Abs(pItem.DsctoAdicionalZD12.Importe));
                    t_cond.Append(itm);
                }
                //si se ingresó Diferencia y es una NC x dif precio:
                if (pItem.Diferencia != null && pItem.Diferencia.Importe != 0m &&
                    ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCZP01"))
                {
                    //--- borrar todos los dctos
                    t_cond.Clear();
                    //--- añadir de nuevo la cond de precio
                    IRfcStructure itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", pItem.Precio.Condicion);
                    itm.SetValue("COND_VALUE", Math.Abs(pItem.Precio.Importe));
                    t_cond.Append(itm);

                    //--- añadir condición diferencia de precio
                    itm = sm.CreateStructure();
                    itm.SetValue("ITM_NUMBER", pItem.Posicion);
                    itm.SetValue("COND_TYPE", pItem.Diferencia.Condicion);
                    itm.SetValue("COND_VALUE", Math.Abs(pItem.Diferencia.Importe));
                    t_cond.Append(itm);
                }
                else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodMuestraGarantia"))
                {
                    t_cond = sm.CreateTable();
                }
                //codigo si es valido
                if (t_cond.Count == 1 && !t_cond[0].GetString("COND_TYPE").Equals("ZP07") && !t_cond[0].GetString("COND_TYPE").Equals("ZP03"))  //RGF 20111107
                {
                    t_cond = sm.CreateTable();
                }

                //percepciones
                InterlocutorBE inter = pObjPedido.Interlocutores.Find(X => X.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"));

                IRfcStructure itme = sm.CreateStructure();

                itme.SetValue("COND_TYPE", "DNI");
                //  if (inter.Persona.Dni != null || inter.Persona.Dni != "" )
                //{
                //  itme.SetValue("REFOBJKEY", inter.Persona.Dni);
                //}
                //else if (inter.Cliente.Ruc != null || inter.Cliente.Ruc != "" ){

                itme.SetValue("REFOBJKEY", inter.Cliente.Ruc);
                //}
                t_cond.Append(itme);
                //fin-percepciones

                //SE CAMBIO POR QUE LA JERARQUIA YA VIENE EN pItem
                //MaterialDALC pObjMaterialDALC = MaterialDALC.Instance(this._connId);
                //MaterialBE pObjMaterialBE = pObjMaterialDALC.leerMaterial(pItem.CodMaterial, pObjPedido.OrgVentas, pObjPedido.CanalDist);                
                //------------------------------------------------------------------
                string pZipCode;
                try
                {
                    string pIlocDM = ParametroDALC.getParamValueStatic("IlocDestMerc");
                    InterlocutorBE objIlocDM = pObjPedido.Interlocutores.Find(X => X.Funcion == pIlocDM);
                    pZipCode = objIlocDM.Cliente.CodigoPostal;
                }
                catch { pZipCode = string.Empty; }
                //------------------------------------------------------------------
                function = dest.Repository.CreateFunction("ZWEB_CALCULAR_PRECIO");
                function.SetValue("VKORG", pObjPedido.OrgVentas);
                function.SetValue("VTWEG", pObjPedido.CanalDist);
                function.SetValue("VKBUR", pObjPedido.CodOficina);
                function.SetValue("KUNNR", pObjPedido.CodCliente);
                function.SetValue("KDGRP", "");
                function.SetValue("MATNR", pItem.CodMaterial.PadLeft(18, '0'));
                function.SetValue("ZTERM", pObjPedido.CondPago);
                function.SetValue("CHARG", pItem.CodLote);
                function.SetValue("VRKME", "");
                function.SetValue("KDKGR", pObjPedido.GrupoCond);
                //SE CAMBIO POR QUE YA VIENE EN pItem
                //function.SetValue("PRODH", pObjMaterialBE.Jerarquia);
                function.SetValue("PRODH", pItem.Material.Jerarquia);
                function.SetValue("FECHA", ParametroDALC.dateNetToSap(pObjPedido.Fecha));
                function.SetValue("POSNR", pItem.Posicion);
                function.SetValue("CANTI", pItem.Cantidad);
                function.SetValue("TIPO", "");
                function.SetValue("AUART", pObjPedido.CodTipoDoc);
                function.SetValue("BAND", p_band);
                function.SetValue("WERKS", pItem.CodCentro);
                function.SetValue("VBELN", pObjPedido.DocOriginal.PadLeft(10, '0'));
                function.SetValue("ZTRANSPORTE", pObjPedido.Ztransporte);
                function.SetValue("ZASCENSOR", (pObjPedido.Zasensor ? "X" : ""));
                function.SetValue("ZNPISO", pObjPedido.Znpiso);
                function.SetValue("ZCODE", pZipCode);
                function.SetValue("AUGRU", pObjPedido.Motivo);
                function.SetValue("VBELV", pObjPedido.NumPedido.PadLeft(10, '0'));
                function.SetValue("T_COND", t_cond);

                function.Invoke(dest);

                IRfcTable T_COND = function.GetTable("T_COND");
                p_Msg = function.GetString("P_MSG");
                p_Ok = function.GetString("P_OK");

                foreach (IRfcStructure item in T_COND)
                {
                    obj = new DescuentoBE();

                    obj.Condicion = item["COND_TYPE"].GetString();
                    obj.Moneda = item["CURRENCY"].GetString();
                    obj.Importe = Convert.ToDecimal(item["COND_VALUE"].GetString());
                    obj.Valor = Convert.ToDecimal(item["CONDVALUE"].GetString());

                    DescuentoBE tmp = lstDescuentos.Find(X => X.Condicion == ParametroDALC.getParamValueStatic("CondPrecio1"));
                    if (pObjPedido.Moneda.Equals("USD") && tmp == null &&
                        obj.Condicion != ParametroDALC.getParamValueStatic("CondDctoGerenciaMonto") &&
                        obj.Condicion != ParametroDALC.getParamValueStatic("CondPrecio1"))
                    {
                        //Convertir de PEN a USD
                        obj.Valor = decimal.Round(obj.Valor / pObjPedido.TipoCambio, 2);
                    }

                    lstDescuentos.Add(obj);
                }
            }
            catch (RfcCommunicationException ex)
            {
                p_Ok = "error";
                p_Msg = "Confirme nuevamente la operación por favor.";
            }
            catch (Exception ex)
            {
                p_Msg = ex.Message;
                //throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            retval = (p_Ok == "" ? "" : p_Msg);
            return lstDescuentos;
        }

        /// <summary>
        /// Función que retorna los status de cabecera del documento comercial.
        /// </summary>
        /// <param name="pNumPedido">nro de pedido</param>
        /// <returns>Estructura con varios status</returns>
        public DECOR.BL.BE.StatusBE verStatus(string pNumPedido)
        {
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            StatusBE retval = null;
            DestConfig dc = new DestConfig();
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_HEAD_STATUS");
                function.SetValue("P_VBELN", pNumPedido);
                function.Invoke(dest);

                IRfcStructure VBSTT_WA = function.GetStructure("VBSTT_WA");

                if (VBSTT_WA != null)
                {
                    retval = new StatusBE();
                    retval.Rechazo = VBSTT_WA.GetString("ABSTA_BEZ");
                    retval.Global = VBSTT_WA.GetString("GBSTA_BEZ");
                    retval.Entrega = VBSTT_WA.GetString("LFSTA_BEZ");
                    retval.Credito = VBSTT_WA.GetString("CMGST_BEZ");
                    retval.Bloqueo = VBSTT_WA.GetString("SPSTG_BEZ");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return retval;
        }

        public List<DECOR.BL.BE.EntregaBE> verEntrega(string pVbeln, string pvbtyp_n)
        {
            List<EntregaBE> lstEntregas = new List<EntregaBE>();
            EntregaBE objEntrega; RfcDestination dest = null;

            IRfcFunction function = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            GenericBE obj = null;
            List<GenericBE> listaResult = new List<GenericBE>();
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_LISTA_MOTIVREC");
                function.SetValue("P_VBELN", pVbeln);
                function.SetValue("VBTYP_N", pvbtyp_n);
                function.Invoke(dest);

                IRfcTable T_LIPS = function.GetTable("T_LIPS");
                IRfcTable T_VBRP = function.GetTable("T_VBRP");
                IRfcTable T_VBAP = function.GetTable("T_VBAP");

                if (pvbtyp_n == "B" || pvbtyp_n == "C" || pvbtyp_n == "K" || pvbtyp_n == "H")
                {
                    foreach (IRfcStructure ls_vbap in T_VBAP)
                    {
                        objEntrega = new EntregaBE();
                        objEntrega.Vbeln = ls_vbap["VBELN"].GetString();
                        objEntrega.Posnr = ls_vbap["POSNR"].GetString();
                        objEntrega.Vgbel = ls_vbap["VGBEL"].GetString();
                        objEntrega.Vgpos = ls_vbap["VGPOS"].GetString();
                        objEntrega.Matnr = ls_vbap["MATNR"].GetString();
                        objEntrega.Meins = ls_vbap["MEINS"].GetString();
                        objEntrega.Arktx = ls_vbap["ARKTX"].GetString();
                        objEntrega.Werks = ls_vbap["WERKS"].GetString();
                        objEntrega.Lgort = ls_vbap["LGORT"].GetString();
                        objEntrega.Charg = ls_vbap["CHARG"].GetString();
                        objEntrega.Gewei = ls_vbap["GEWEI"].GetString();
                        objEntrega.Ntgew = Convert.ToDecimal(ls_vbap["NTGEW"].GetString());
                        objEntrega.Lfimg = Convert.ToDecimal(ls_vbap["KWMENG"].GetString());
                        lstEntregas.Add(objEntrega);
                    }
                }
                else if (pvbtyp_n == "M" || pvbtyp_n == "N" || pvbtyp_n == "O" || pvbtyp_n == "S")
                {
                    //Factura: Datos de posición
                    foreach (IRfcStructure ls_vbrp in T_VBRP)
                    {
                        objEntrega = new EntregaBE();
                        objEntrega.Vbeln = ls_vbrp["VBELN"].GetString();
                        objEntrega.Posnr = ls_vbrp["POSNR"].GetString();
                        objEntrega.Vgbel = ls_vbrp["VGBEL"].GetString();
                        objEntrega.Vgpos = ls_vbrp["VGPOS"].GetString();
                        objEntrega.Matnr = ls_vbrp["MATNR"].GetString();
                        objEntrega.Meins = ls_vbrp["MEINS"].GetString();
                        objEntrega.Arktx = ls_vbrp["ARKTX"].GetString();
                        objEntrega.Werks = ls_vbrp["WERKS"].GetString();
                        objEntrega.Lgort = ls_vbrp["LGORT"].GetString();
                        objEntrega.Charg = ls_vbrp["CHARG"].GetString();
                        objEntrega.Gewei = ls_vbrp["GEWEI"].GetString();
                        objEntrega.Ntgew = Convert.ToDecimal(ls_vbrp["NTGEW"].GetString());
                        objEntrega.Lfimg = Convert.ToDecimal(ls_vbrp["FKIMG"].GetString());
                        lstEntregas.Add(objEntrega);
                    }
                }
                else
                {

                    foreach (IRfcStructure ls_lips in T_LIPS)
                    {
                        objEntrega = new EntregaBE();
                        objEntrega.Vbeln = ls_lips["VBELN"].GetString();
                        objEntrega.Posnr = ls_lips["POSNR"].GetString();
                        objEntrega.Vgbel = ls_lips["VGBEL"].GetString();
                        objEntrega.Vgpos = ls_lips["VGPOS"].GetString();
                        objEntrega.Matnr = ls_lips["MATNR"].GetString();
                        objEntrega.Meins = ls_lips["MEINS"].GetString();
                        objEntrega.Arktx = ls_lips["ARKTX"].GetString();
                        objEntrega.Werks = ls_lips["WERKS"].GetString();
                        objEntrega.Lgort = ls_lips["LGORT"].GetString();
                        objEntrega.Charg = ls_lips["CHARG"].GetString();
                        objEntrega.Gewei = ls_lips["GEWEI"].GetString();
                        objEntrega.Lfimg = Convert.ToDecimal(ls_lips["LFIMG"].GetString());
                        objEntrega.Ntgew = Convert.ToDecimal(ls_lips["NTGEW"].GetString());
                        lstEntregas.Add(objEntrega);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return lstEntregas;
        }

        public List<DECOR.BL.BE.SeguimientoBE> buscaDocumentos(string pNumPedido)
        {
            List<SeguimientoBE> lstSeguimiento = new List<SeguimientoBE>();
            DestConfig dc = new DestConfig();
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_SEGUIMIENTO");
                function.SetValue("P_VBELN", pNumPedido);
                function.Invoke(dest);

                IRfcTable T_SEGUIM = function.GetTable("T_SEGUIM");

                foreach (IRfcStructure item in T_SEGUIM)
                {
                    SeguimientoBE objSeguimiento = new SeguimientoBE();
                    objSeguimiento.Jerarquia = item.GetString("DOCITE");
                    objSeguimiento.NumDocumento = item.GetString("DOCNRO");
                    objSeguimiento.TipoDocumento = item.GetString("DOCTIP");
                    objSeguimiento.Estado = item.GetString("DOCEST");
                    objSeguimiento.DocSeleccionado = item.GetString("DOCSEL") == "X" ? true : false;
                    objSeguimiento.Referencia = item.GetString("XBLNR");
                    objSeguimiento.DocFecha = ParametroDALC.dateSapToNet(item.GetString("DOCFEC"));
                    objSeguimiento.codTipoDoc = item.GetString("VBTYP_N");
                    lstSeguimiento.Add(objSeguimiento);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return lstSeguimiento;
        }

        public void buscaDatosImpresion(string pNumPedido, out string pDireccion, out string pTelefono, out string pFax, out string pAtencion)
        {
            throw new NotImplementedException();
        }

        public List<DECOR.BL.BE.GenericBE> buscarMotivosRechazo(string pCodMotivo)
        {
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            GenericBE obj = null;
            List<GenericBE> listaResult = new List<GenericBE>();
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_LISTA_MOTIVREC");
                function.SetValue("IM_ABGRU", pCodMotivo);
                function.Invoke(dest);

                IRfcTable TVAGT = function.GetTable("T_TVAGT");

                foreach (IRfcStructure item in TVAGT)
                {
                    obj = new GenericBE();

                    obj.Codigo = item["ABGRU"].GetString();
                    obj.Descripcion = item["BEZEI"].GetString();
                    listaResult.Add(obj);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return listaResult;
        }

        public List<DECOR.BL.BE.DetalleBE> buscaTipoPosicion(string pCodTipoDoc, string pCodMaterial, string pOrgVtas, string pCanalDist, string pCodCentro, out string pTipoPos)
        {
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            List<DetalleBE> lstDetalleBE = new List<DetalleBE>();
            DetalleBE obj = null;
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_BUSCA_TIPOPOSICION");
                function.SetValue("P_MATNR", pCodMaterial);
                function.SetValue("P_VKORG", pOrgVtas);
                function.SetValue("P_VTWEG", pCanalDist);
                function.SetValue("P_AUART", pCodTipoDoc);
                function.SetValue("P_WERKS", pCodCentro);

                function.Invoke(dest);

                IRfcTable STPO = function.GetTable("T_STPO");

                foreach (IRfcStructure item in STPO)
                {
                    obj = new DetalleBE();
                    //MaterialBE objMat = (MaterialDALC.Instance(this._connId)).leerMaterial(item["IDNRK"].GetString(), pOrgVtas, pCanalDist);
                    //cod mat
                    obj.CodMaterial = item["IDNRK"].GetString();
                    //cant
                    obj.CantComp = Convert.ToDecimal(item["MENGE"].GetString());
                    //obj.Material = objMat;
                    lstDetalleBE.Add(obj);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            pTipoPos = function.GetString("P_PSTYV");
            return lstDetalleBE;
        }

        public List<DECOR.BL.BE.PedidoBE> listaPedidos(string pNumDoc, string pCodUsuario,
            DateTime pFecInicio, DateTime pFecFin, string pOrgVtas, string pCanal, string pOficina,
            string pRefLegal)
        {
            List<PedidoBE> lstPedidos = new List<PedidoBE>();
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_LISTA_PEDIDOS");
                function.SetValue("P_VBELN", pNumDoc);
                function.SetValue("P_FECINI", pFecInicio);
                function.SetValue("P_FECFIN", pFecFin);
                function.SetValue("P_PERNR", pCodUsuario);
                function.SetValue("P_VKORG", pOrgVtas);
                function.SetValue("P_VTWEG", pCanal);
                function.SetValue("P_VKBUR", pOficina);

                function.Invoke(dest);

                IRfcTable T_VBAK = function.GetTable("T_VBAK");
                IRfcTable T_DETPED = function.GetTable("T_DETPED");

                PedidoPosBE objPedidoPos;
                List<PedidoPosBE> lstPedidoPos = new List<PedidoPosBE>();

                foreach (IRfcStructure ls_pedidos in T_VBAK)
                {
                    PedidoBE obj = new PedidoBE();
                    obj.NumPedido = ls_pedidos["VBELN"].GetString();
                    obj.Fecha = Convert.ToDateTime(ls_pedidos["ERDAT"].GetString());
                    obj.CondPago = ls_pedidos["GRUPP"].GetString();
                    obj.CodTipoDoc = ls_pedidos["AUART"].GetString();
                    //--- solo para la búsqueda y para no crear otra estructura.
                    obj.CodCliente = ls_pedidos["KUNNR"].GetString();
                    //-- nombre cliente
                    obj.DestFactura = ls_pedidos["KTEXT"].GetString();
                    //-- ruc/dni cliente
                    obj.DestMercaderia = ls_pedidos["ERNAM"].GetString();
                    //-- estado del documento:
                    obj.Estado = ls_pedidos["CRM_GUID"].GetString().Trim();

                    lstPedidos.Add(obj);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return lstPedidos;
        }

        public List<DECOR.BL.BE.PedidoBE> listaPedidos(string pNumDoc, string pCodUsuario,
            DateTime pFecInicio, DateTime pFecFin, string pOrgVtas, string pCanal, string pOficina,
            string pRefLegal, string pMatrn, string pNombCli, string pStceg, string pDescMater,
            string pCodCli)
        {
            List<PedidoBE> lstPedidos = new List<PedidoBE>();
            DestConfig dc = new DestConfig();
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            if (!pRefLegal.Trim().Equals(""))
            {
                pRefLegal = pRefLegal.Trim().PadLeft(10, '0');
            }
            else
            {
                pRefLegal = "";
            }
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_LISTA_PEDIDOS");
                function.SetValue("P_VBELN", pNumDoc);
                function.SetValue("P_FECINI", pFecInicio);
                function.SetValue("P_FECFIN", pFecFin);
                function.SetValue("P_PERNR", pCodUsuario);
                function.SetValue("P_VKORG", pOrgVtas);
                function.SetValue("P_VTWEG", pCanal);
                function.SetValue("P_VKBUR", pOficina);
                function.SetValue("P_XBLNR", pRefLegal);
                function.SetValue("P_MATNR", (pMatrn.Equals("") ? "" : pMatrn.Trim().PadLeft(18, '0')));
                function.SetValue("P_AD_NAME1", pNombCli);
                function.SetValue("P_STCEG", pStceg.PadLeft(10, '0'));
                function.SetValue("P_KUNNR", pCodCli);
                function.SetValue("P_ARKTX", pDescMater);

                function.Invoke(dest);

                IRfcTable tCab = function.GetTable("T_VBAK");
                //IRfcTable tDet = function.GetTable("T_DETPED");

                PedidoBE objP = null;

                foreach (IRfcStructure item in tCab)
                {
                    objP = new PedidoBE();
                    objP.NumPedidoCorto = item["VBELN"].GetString().PadLeft(10, '0');
                    objP.CodClienteCorto = item["KUNNR"].GetString();
                    objP.DestFactura = item["KTEXT"].GetString();
                    objP.DestMercaderia = item["ERNAM"].GetString();
                    objP.Fecha = Convert.ToDateTime(Convert.ToDateTime(item["ERDAT"].GetString()).ToShortDateString());
                    objP.ClaseDocumento = item["BSTNK"].GetString();
                    objP.TotalConIgv = item["NETWR"].GetDecimal();
                    objP.Estado = item["CRM_GUID"].GetString().Trim();
                    objP.CondPago = item["GRUPP"].GetString();
                    objP.CodTipoDoc = item["AUART"].GetString();
                    objP.CodCliente = "";

                    lstPedidos.Add(objP);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }


            return lstPedidos;
        }

        public List<DECOR.BL.BE.PedidoPosBE> ListaPendDesp(string pNumPedido, DateTime pFecIni,
            DateTime pFecFin, string pCodAsesor, string pOrgVentas, string pCanalDist, string pOfVentas)
        {
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            List<PedidoPosBE> lstPedidoPos = new List<PedidoPosBE>();
            DestConfig dc = new DestConfig();
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_LISTA_PENDDESP");
                function.SetValue("P_VBELN", pNumPedido);
                function.SetValue("P_FECINI", pFecIni);
                function.SetValue("P_FECFIN", pFecFin);
                function.SetValue("P_PERNR", pCodAsesor);
                function.SetValue("P_VKORG", pOrgVentas);
                function.SetValue("P_VTWEG", pCanalDist);
                function.SetValue("P_VKBUR", pOfVentas);

                function.Invoke(dest);

                IRfcTable T_PEDIDOS = function.GetTable("T_PEDIDOS");

                PedidoPosBE objPedidoPos;

                foreach (IRfcStructure ls_pedidos in T_PEDIDOS)
                {
                    objPedidoPos = new PedidoPosBE();
                    objPedidoPos.NumPedido = ls_pedidos["VBELN"].GetString();
                    objPedidoPos.CodCliente = ls_pedidos["KUNNR"].GetString();
                    objPedidoPos.NomCliente = ls_pedidos["NAME1"].GetString();
                    objPedidoPos.RucCliente = ls_pedidos["STCD1"].GetString();
                    objPedidoPos.FecPedido = Convert.ToDateTime(ls_pedidos["ERDAT"].GetString());
                    objPedidoPos.PosNr = ls_pedidos["POSNR"].GetString();
                    objPedidoPos.CodMaterial = ls_pedidos["MATNR"].GetString();
                    objPedidoPos.NomMaterial = ls_pedidos["MAKTX"].GetString();
                    objPedidoPos.CantPed = ls_pedidos["WMENG"].GetDecimal();//pedida
                    objPedidoPos.CantConf = ls_pedidos["BMENG"].GetDecimal();//confirmada
                    objPedidoPos.CantPend = ls_pedidos["OMENG"].GetDecimal();//pendiente
                    objPedidoPos.FecReparto = Convert.ToDateTime(ls_pedidos["EDATU"].GetString());
                    lstPedidoPos.Add(objPedidoPos);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return lstPedidoPos;
        }

        /// <summary>
        /// Valida que la copia sea permitida
        /// </summary>
        /// <param name="pNumDoc">Número de documento Original</param>
        /// <param name="pTipoDoc">Tipo de documento a crear</param>
        /// <returns>S = si se puede  N = No se puede</returns>
        public string validaCopia(string pNumDoc, string pTipoDoc)
        {
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            string pReturn = string.Empty;
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_VALIDA_COPIA");
                function.SetValue("P_VBELN", pNumDoc.PadLeft(10, '0'));
                function.SetValue("P_TIPO", pTipoDoc);
                function.Invoke(dest);

                pReturn = function.GetString("P_RPTA");

                if (pReturn.Equals(""))
                {
                    pReturn = "N";
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return pReturn;
        }

        #endregion

        #region IPedidoDALC Members


        //public List<PedidoBE> listaPedidoCabeceraDetalle(string pNumDoc, string pCodUsuario, 
        //    DateTime pFecInicio, DateTime pFecFin, string pOrgVtas, string pCanal, string pOficina, 
        //    string pRefLegal, string pMatrn, string pNombCli, string pStceg, string pDescMater, 
        //    string pCodCli)
        //{
        //    List<DetalleBE> lstDetalle = new List<DetalleBE>();
        //    return listaPedidoCabeceraDetalle(pNumDoc, pCodUsuario, pFecInicio, pFecFin, pOrgVtas,
        //        pCanal, pOficina, pRefLegal, pMatrn, pNombCli, pStceg, pDescMater, pCodCli, out lstDetalle);
        //}

        #endregion

        #region IPedidoDALC Members


        public List<PedidoCabeceraBE> listaPedidoCabeceraDetalle(string pNumDoc, string pCodUsuario,
            DateTime pFecInicio, DateTime pFecFin, string pOrgVtas, string pCanal, string pOficina,
            string pRefLegal, string pMatrn, string pNombCli, string pStceg, string pDescMater,
            string pCodCli, out List<PedidoDetalleBE> lstPedidoDetalle, string pTipoDocumento)
        {
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            List<PedidoCabeceraBE> _lstPedido = new List<PedidoCabeceraBE>();
            List<PedidoDetalleBE> _lstDetalleBE = new List<PedidoDetalleBE>();
            List<PedidoDetalleBE> lstTmp = new List<PedidoDetalleBE>();
            if (!pRefLegal.Trim().Equals(""))
            {
                pRefLegal = pRefLegal.Trim();
            }
            else
            {
                pRefLegal = "";
            }

            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZCM_SD_005");
                function.SetValue("P_VBELN", pNumDoc);
                function.SetValue("P_FECINI", pFecInicio);
                function.SetValue("P_FECFIN", pFecFin);
                function.SetValue("P_PERNR", pCodUsuario);
                function.SetValue("P_VKORG", pOrgVtas);
                function.SetValue("P_VTWEG", pCanal);
                function.SetValue("P_VKBUR", pOficina);
                function.SetValue("P_XBLNR", pRefLegal);
                function.SetValue("P_MATNR", (pMatrn.Equals("") ? "" : pMatrn.Trim()));
                function.SetValue("P_AD_NAME1", pNombCli);
                function.SetValue("P_STCEG", pStceg);
                function.SetValue("P_KUNNR", pCodCli);
                function.SetValue("P_ARKTX", pDescMater);
                function.SetValue("P_AUART", pTipoDocumento);

                function.Invoke(dest);

                IRfcTable tCab = function.GetTable("T_VBAK");
                IRfcTable tDet = function.GetTable("T_DETPED");

                PedidoCabeceraBE objP = null;
                PedidoDetalleBE objD = null;

                foreach (IRfcStructure item in tCab)
                {
                    objP = new PedidoCabeceraBE();
                    objP.NumeroPedido = item["VBELN"].GetString();
                    objP.CodigoCliente = item["KUNNR"].GetString();
                    objP.NombreCliente = item["KTEXT"].GetString();
                    objP.NIF = item["ERNAM"].GetString();
                    objP.FechaDocumento = item["ERDAT"].GetString();
                    objP.ClaseDocumento = item["BSTNK"].GetString();
                    objP.Total = item["NETWR"].GetDecimal();
                    objP.Estado = item["CRM_GUID"].GetString().Trim();

                    _lstPedido.Add(objP);
                }

                foreach (IRfcStructure item in tDet)
                {
                    objD = new PedidoDetalleBE();
                    objD.DocumentoVenta = item["VBELN"].GetString();
                    objD.Posicion = item["POSNR"].GetString().TrimStart('0');
                    objD.CodigoMaterial = item["MATNR"].GetString();
                    objD.Material = item["ARKTX"].GetString();
                    objD.Cantidad = item["BRGEW"].GetString();
                    objD.UnidadMedida = "UN";
                    //objD.FechaReparto = item["EDATU"].GetString();
                    objD.CantidadConf = item["BMENG"].GetString();
                    objD.FConf = "-";
                    objD.MotivoRechazo = item["NTGEW"].GetString();
                    objD.PrioridadEntrega = item["LPRIO"].GetString();
                    objD.CentroAlmacen = item["LGORT"].GetString();
                    objD.Lote = item["CHARG"].GetString();

                    _lstDetalleBE.Add(objD);
                }
                //quedamos con los  qno se repiten //rhuapaya
                var consulta = from t in _lstDetalleBE group t by new { t.Posicion, t.DocumentoVenta, t.CodigoMaterial };

                PedidoDetalleBE objTmp = new PedidoDetalleBE();
                foreach (var result in consulta)
                {
                    foreach (var item in result)
                    {
                        objTmp = new PedidoDetalleBE();
                        objTmp.Cantidad = item.Cantidad;
                        objTmp.DocumentoVenta = item.DocumentoVenta;
                        objTmp.Posicion = item.Posicion;
                        objTmp.CodigoMaterial = item.CodigoMaterial;
                        objTmp.Material = item.Material;
                        objTmp.Cantidad = item.Cantidad;
                        objTmp.UnidadMedida = item.UnidadMedida;
                        objTmp.CantidadConf = item.CantidadConf;
                        objTmp.FConf = "-";
                        objTmp.MotivoRechazo = item.MotivoRechazo;
                        objTmp.PrioridadEntrega = item.PrioridadEntrega;
                        objTmp.CentroAlmacen = item.CentroAlmacen;
                        objTmp.Lote = item.Lote;
                        lstTmp.Add(objTmp);
                        break;
                    }
                }

                //recorremos las lista cabecera para asociar con detalle
                foreach (PedidoCabeceraBE item in _lstPedido)
                {
                    var vbeln = (from c in lstTmp where c.DocumentoVenta == item.NumeroPedido select c).ToList();
                    if (vbeln.Count > 0)
                    {
                        item.Detalle = vbeln.ToList();
                    }
                    else
                    {
                        List<PedidoDetalleBE> lst = new List<PedidoDetalleBE>();
                        item.Detalle = lst;
                    }
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }


            lstPedidoDetalle = lstTmp;
            return _lstPedido;
        }

        #endregion

        /// <summary>
        /// Devuelve la lista de interlocutores para un nro de pedido
        /// </summary>
        /// <param name="pNumPedido">Número de Pedido</param>
        /// <returns>Lista de interlocutores InterlocutorBE</returns>
        public List<InterlocutorBE> listaInterlocutores(string pNumPedido)
        {
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();

            List<InterlocutorBE> lstInterlocutores = new List<InterlocutorBE>();
            InterlocutorBE objILoc;
            DestConfig dc = new DestConfig();
            try
            {
                /*try
                {
                    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                }
                catch { }
                RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                */
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_INTER_PEDIDO");
                function.SetValue("IM_VBELN", pNumPedido);

                function.Invoke(dest);

                IRfcTable T_PARTNERS = function.GetTable("T_PARTNERS");

                foreach (IRfcStructure item in T_PARTNERS)
                {
                    objILoc = new InterlocutorBE();
                    objILoc.Funcion = item["PARTN_ROLE"].GetString();
                    objILoc.Cliente.CodigoPostal = item["POSTL_CODE"].GetString();
                    objILoc.Cliente.Telefono = item["TELEPHONE"].GetString();
                    objILoc.Cliente.Direccion = item["REFOBJKEY"].GetString();
                    if (ParametroDALC.esTipoX(item["PARTN_ROLE"].GetString(), "IlocDestMerc"))
                    {
                        objILoc.Cliente.TranspZone = item["TRANSPZONE"] == null ? "" : item["TRANSPZONE"].GetString();
                    }

                    if (ParametroDALC.esTipoX(item["PARTN_ROLE"].GetString(), "IlocEmpresa"))
                    {
                        objILoc.Cliente.Codigo = item["PARTN_NUMB"].GetString();
                        objILoc.Cliente.Descripcion = (item["NAME"].GetString() + item["NAME_2"].GetString() + item["NAME_3"].GetString() + item["NAME_4"].GetString()).Trim(); //rgutierrez 16.11.2011
                        objILoc.Cliente.Ciudad = item["CITY"].GetString();
                        objILoc.Cliente.Titulo = item["TITLE"].GetString();
                        objILoc.Cliente.Ruc = item["TELEBOX"].GetString();
                    }
                    else if (ParametroDALC.esTipoX(item["PARTN_ROLE"].GetString(), "IlocPersona"))
                    {
                        objILoc.Persona.CodPersona = item["PARTN_NUMB"].GetString();
                        objILoc.Persona.Descripcion = (item["NAME"].GetString() + " " + item["NAME_2"].GetString()).Trim();
                        if (item["TELEBOX"].GetString() == "")
                        {
                            objILoc.Cliente.Ruc = "";
                        }
                    }

                    lstInterlocutores.Add(objILoc);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc); 
            }

            return lstInterlocutores;
        }

        /// <summary>
        /// función para grabar el NIF en pedidos con clientes eventuales
        /// </summary>
        /// <param name="pObjPedido">doc. de ventas</param>
        private void grabarNIF(PedidoBE pObjPedido)
        {
            string strRucAG = "", strRucRG = "";
            bool dniAG = false, dniRG = false;
            InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
            InterlocutorBE objResPago = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); });
            if (objSolicitante != null && objSolicitante.Cliente != null)
            {
                if (!string.IsNullOrEmpty(objSolicitante.Cliente.Ruc))
                {
                    strRucAG = objSolicitante.Cliente.Ruc;
                    if (objSolicitante.Cliente.Ruc.Length == 8)
                    {
                        dniAG = true;
                    }//sino es ruc y queda en false
                }
            }
            if (objResPago != null && objResPago.Cliente != null)
            {
                if (!string.IsNullOrEmpty(objResPago.Cliente.Ruc))
                {
                    strRucRG = objResPago.Cliente.Ruc;
                    if (objResPago.Cliente.Ruc.Length == 8)
                    {
                        dniRG = true;
                    }//sino es ruc y queda en false
                }
            }

            //grabar solo si hay algún ruc
            if (!strRucAG.Equals("") || !strRucRG.Equals(""))
            {
                //List<FleteBE> lstFlete = new List<FleteBE>();
                //FleteBE objFlete = null;
                DestConfig dc = new DestConfig();
                IRfcFunction function = null; RfcDestination dest = null;
                //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
                try
                {
                    /*try
                    {
                        RfcDestinationManager.RegisterDestinationConfiguration(dc);
                    }
                    catch { }
                    RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                    */
                    dest = DALC.getDestination(out dc);
                    function = dest.Repository.CreateFunction("ZWEB_GRABAR_NIF");
                    function.SetValue("IM_VBELN", pObjPedido.NumPedido);
                    function.SetValue("IM_AUART", pObjPedido.CodTipoDoc);
                    function.SetValue("IM_STCD1AG", strRucAG);
                    function.SetValue("IM_STCD1RG", strRucRG);
                    function.SetValue("IM_ZTERM", pObjPedido.CondPago);
                    function.SetValue("IM_PERFISAG", (dniAG ? "X" : ""));
                    function.SetValue("IM_PERFISRG", (dniRG ? "X" : ""));
                    function.Invoke(dest);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
                }
            }
        }

        #region IPedidoDALC Members


        //public string reaprovisionar(out bool pOk, PedidoBE pObjPedido)
        //{
        //    throw new NotImplementedException();
        //}

        //public List<DescuentoBE> calcularPrecios(PedidoBE pObjPedido, DetalleBE pItem, out string retval)
        //{
        //    throw new NotImplementedException();
        //}

        #endregion

        static IEnumerable<string> Split(string str, int maxChunkSize)
        {


            for (int i = 0; i < str.Length; i += maxChunkSize)
                yield return str.Substring(i, Math.Min(maxChunkSize, str.Length - i));
        }

    }
}





